C 程序的输出 | 36套
1.下面的输出是什么?
void main()
{
int const* p = 5;
printf("%d", ++(*p));
}
选项:
A. 6
B. 5
C. 垃圾值
D. 编译器错误
Answer : D
解释:它会给出编译时错误,因为我们正在尝试更改常量值。 p 是一个指向“常量整数”的指针。但是我们试图改变“常量整数”的值。
2.下面的输出是什么?
void main()
{
char* p;
printf("%d %d", sizeof(*p), sizeof(p));
}
选项:
A. 1 1
B. 1 8
2 1
D. 2 2
Answer : B
说明: sizeof()运算符给出其操作数占用的字节数。 P 是一个字符指针,它需要一个字节来存储它的值(一个字符)。因此 sizeof(*p) 给出的值为 1。 因为它需要两个字节来存储字符指针的地址 sizeof(p) 给出了 8。
3.下面的输出是什么?
void main()
{
int m, i = 0, j = 1, k = 2;
m = i++ || j++ || k++;
printf("%d %d %d %d", m, i, j, k);
}
选项:
A. 1 1 2 3
B. 1 1 2 2
0 1 2 2
D. 0 1 2 3
Answer : B
解释:在一个涉及 || 的表达式中运算符,计算从左到右进行,如果其中一个组件的计算结果为 true(非零值),则计算将停止。
所以在给定的表达式中 m = i++ || j++|| k++。
它将在 j 处停止并在 m 中分配 j 的当前值。
因此m = 1, i = 1, j = 2 and k = 2 (因为k++不会遇到。所以它的值保持为2)
4.下面的输出是什么?
void main()
{
int i = 0;
printf("%d %d", i, i++);
}
选项:
0 1
乙. 1 0
0 0
D. 1 1
Answer : B
说明:由于评估是从右到左。因此,当打印语句执行 i = 0 的值时,因为它是从右到左执行的——当 i++ 将首先执行并打印值 0(因为它的后增量)并且在打印 0 后 i 的值变为 1。
5.下面的输出是什么?
#include
int main(void)
{
char p;
char buf[10] = { 1, 2, 3, 4, 5, 6, 9, 8 };
p = (buf + 1)[5];
printf("%d", p);
return 0;
}
选项:
A. 5
B. 6
C. 9
D. 错误
Answer : C
解释: x[i] 等价于 *(x + i),所以 (buf + 1)[5] 是 *(buf + 1 + 5),或 buf[6]。