C 程序的输出 |第 63 集
1) 以下程序的输出是什么?
#include
#include
int main(void)
{
char* p = "geeks";
printf("%lu %lu %lu ", sizeof(p), sizeof(*p), sizeof("geeks"));
printf("%lu %lu", strlen(p), strlen("geeks"));
return 0;
}
输出:
8 1 6 5 5
说明:p是一个指针,以便的sizeof返回的sizeof(字符*),* p是字符类型,的sizeof(“爱好者”)返回字符包括空字符的数字,字符串的strlen的(p)返回长度指出用p不空字符,无空字符strlen的返回字符数。
2) 以下程序的输出是什么?
#include
int main()
{
int array[] = {[1] = 1, [0] = 2, [2] = 3 };
printf("%d %d %d", array[0], array[1], array[2]);
return 0;
}
输出:
2 1 3
说明:上述初始化技术是唯一的,但在 C 中是允许的。
3) 以下程序的输出是什么?
#include
char A()
{
char c = 'B';
return c;
}
int main()
{
printf("%lu", sizeof(A()));
return 0;
}
输出:
1
说明:即使这是函数指针,sizeof 也会获取返回类型并返回该数据类型的大小。这里,返回类型是char,所以输出是1。
4) 以下程序的输出是什么?
#include
int main()
{
int n;
n = (int)sizeof(!2.3);
printf("%d", n);
return 0;
}
输出:
4
解释:“!”运算符接受一个参数,如果值为 0,则返回 1,否则返回 0。所以,!2.3 是 0。到 sizeof 0 是一个整数,所以输出是 4。
5) 以下程序的输出是什么?
#include
#define declare(x) int x;
int main()
{
int a;
declare(a)
printf("declare(a)");
return 0;
}
输出:
Compilation error
说明:宏声明会在编译前被替换,结果代码在程序中会有两次“int a”声明,导致编译错误。