执行以下程序时,将打印以下给出的选项中的哪一项?
#include
int a1[] = {6, 7, 8, 18, 34, 67};
int a2[] = {23, 56, 28, 29};
int a3[] = {-12, 27, -31};
int *x[] = {a1, a2, a3};
void print(int *a[])
{
printf("%d,", a[0][2]);
printf("%d,", *a[2]);
printf("%d,", *++a[0]);
printf("%d,", *(++a)[0]);
printf("%d\n", a[-1][+1]);
}
main()
{
print(x);
}
(A) 8, -12, 7, 23, 8
(乙) 8, 8, 7, 23, 7
(C) -12, -12, 27, -31, 23
(D) -12, -12, 27, -31, 56答案:(一)
解释:
int *x[]
= {a1, a2, a3};行使 x[0] = a1 等。因此,每当引用 x[0] 时,都会在内部查看 a1 数组。
• a[0][2] = a1[2] = 8
• *a[2] = *a3 = a3[0] = -12
• *++a[0] = *(++a[0]) = a1[1] = 7:a[0] 现在指向 a1 的第二个元素。
• *(++a)[0] = *a2 = a2[0] = 23:a 现在指向数组 a2。
• a[-1][+1] = *(a1+1+1) = a1[2] = 8 : *(a-1) = a1+1 由于最后两个表达式。
因此,正确答案是 (A) 8, -12, 7, 23, 8。
此解决方案由vineet purswani 提供。
这个问题的测验