C程序的输出| 17套
预测以下 C 程序的输出。
问题 1
#include
#define R 10
#define C 20
int main()
{
int (*p)[R][C];
printf("%d", sizeof(*p));
getchar();
return 0;
}
输出: 10*20*sizeof(int) 对于整数大小为 4 字节的编译器,它是“800”。
指针 p 被取消引用,因此它产生对象的类型。在本例中,它是一个整数数组的数组。因此,它打印 R*C*sizeof(int)。
感谢 Venki 提出这个解决方案。
问题2
#include
#define f(g,g2) g##g2
int main()
{
int var12 = 100;
printf("%d", f(var,12));
getchar();
return 0;
}
输出:100
运算符## 称为“令牌粘贴”或“合并”运算符。它将两个令牌合并为一个令牌。所以,经过预处理后,main函数变成如下,并打印100。
int main()
{
int var12 = 100;
printf("%d", var12);
getchar();
return 0;
}
问题 3
#include
int main()
{
unsigned int x = -1;
int y = ~0;
if(x == y)
printf("same");
else
printf("not same");
printf("\n x is %u, y is %u", x, y);
getchar();
return 0;
}
输出:“same x is MAXUINT, y is MAXUINT” 其中 MAXUINT 是无符号整数的最大可能值。
-1 和 ~0 本质上具有相同的位模式,因此 x 和 y 必须相同。在比较中,y 被提升为无符号并与 x 进行比较。结果是“一样”。但是,当解释为有符号和无符号时,它们的数值会有所不同。 x 是 MAXUNIT,y 是 -1。因为我们也有 %u 代表 y,所以输出将是 MAXUNIT 和 MAXUNIT。
感谢文基的解释。