📜  C 程序的输出 | 36套

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

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]。