预测以下C程序的输出。
null
问题1
#include<stdio.h> #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<stdio.h> #define f(g,g2) g##g2 int main() { int var12 = 100; printf ( "%d" , f(var,12)); getchar (); return 0; } |
产量:100 运算符##被称为“ 标记粘贴”或“合并”运算符 .它将两个代币合并为一个代币。那么,之后呢 预处理 ,主要功能如下,并打印100。
int main() { int var12 = 100; printf ( "%d" , var12); getchar (); return 0; } |
问题3
#include<stdio.h> int main() { unsigned int x = -1; int y = ~0; if (x == y) printf ( "same" ); else printf ( "not same" ); printf ( " x is %u, y is %u" , x, y); getchar (); return 0; } |
输出:“相同的x是最大值,y是最大值”,其中最大值是无符号整数的最大可能值。 -1和~0基本上具有相同的位模式,因此x和y必须相同。在比较中,y被提升为无符号,并与x进行比较。结果是“相同”。然而,当解释为有符号和无符号时,它们的数值会有所不同。x是最大单位,y是-1。因为y也有%u,所以输出将是MAXUNIT和MAXUNIT。 感谢文基的解释。
如果您发现任何答案/解释不正确,或者您想分享有关上述主题的更多信息,请发表评论
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END