执行以下程序时,将打印以下给出的哪个选择?
#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
(B) 8、8、7、23、7
(C) -12,-12、27,-31、23
(D) -12,-12、27,-31、56答案: (A)
解释:
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提供。
这个问题的测验