C程序|集17的输出

预测以下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
喜欢就支持一下吧
点赞12 分享