C 程序的输出 | 38套
问题1。下面的输出是什么?
#include
void main()
{
int a[5] = { 5, 1, 15, 20, 25 };
int i, j, m;
i = ++a[1];
j = a[1]++;
m = a[i++];
printf("%d, %d, %d", i, j, m);
}
选项 :
A. 3、2、15
B. 2, 3, 20
C. 2, 1, 15
D. 1, 2, 5
Answer : A
解释: >> int a[5] = {5, 1, 15, 20, 25};变量 arr 被声明为一个大小为 5 的整数数组,它被初始化为
a[0] = 5, a[1] = 1, a[2] = 15, a[3] = 20, a[4] = 25。
>> int i, j, m;变量 i、j、m 被声明为整数类型。
>> i = ++a[1];变成 i = ++1;因此 i = 2 和 a[1] = 2
>> j = a[1]++;变成 j = 2++;因此 j = 2 和 a[1] = 3。
>> m = a[i++];变成 m = a[2];因此 m = 15 并且 i 增加 1(i++ 表示 2++ 所以 i=3)
>> printf(“%d, %d, %d”, i, j, m);它打印变量 i, j, m 的值
问题2。下面的输出是什么?
void main()
{
int arr[10] = { 1, 2, 3, 4, 5 };
printf("%d", arr[5]);
}
选项 :
A. 垃圾值
B. 5
C. 6
D. 0
Answer : D
说明:当数组在声明时部分初始化时,数组的其余元素默认初始化为 0。
问题3。下面的输出是什么?
假设数组从 65472 开始,每个整数占用 2 个字节
void main()
{
int a[3][4] = { 1, 2, 3, 4, 4, 3, 2, 1, 7, 8, 9, 0 };
printf("%u, %u", a + 1, &a + 1);
}
选项 :
A. 65474、65488
B. 65480、65488
C. 65480, 65496
D. 65474, 65476
Answer : C
说明:数组的基地址(也是第一个元素的地址)是65472。
对于像对数组的引用这样的二维数组,其类型为“指向 4 个整数数组的指针”。因此,a+1 指向数组 a 中第二行的第一个元素的内存位置。因此 65472 +(4 个整数 * 2 个字节)= 65480
然后,&a 的类型为“指向 4 个整数的 3 个数组的数组的指针”,总共 12 个整数。因此,&a+1 表示“12 个整数 * 2 个字节 * 1 = 24 个字节”。
因此,起始地址 65472 + 24 = 65496。所以,&a+1 = 65496
问题4。下面的输出是什么?
#include
void main()
{
printf(6 + "Geeks for Geeks");
}
选项 :
A. 对于极客
B. 极客
C.编译时错误
D、无输出
Answer : A
说明:它跳过 6 个字符并打印给定的字符串。
问题5。下面的输出是什么?
#include
void main()
{
char* s = "hello";
char* p = s;
printf("%p\t%p", p, s);
}
选项 :
A. 打印不同的地址
B. 打印相同的地址
C. 运行时错误
D、什么都没有
Answer : B
解释: *s 将保存值“hello”,并且该字符串被分配给 *p,它将开始指向相同的物理位置。