📜  C程序的输出| 17套

📅  最后修改于: 2022-05-13 01:56:10.992000             🧑  作者: Mango

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。
感谢文基的解释。