📜  门| GATE IT 2006 |第51章

📅  最后修改于: 2021-06-29 01:11:29             🧑  作者: Mango

执行以下程序时,将打印以下给出的哪个选择?

#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提供
这个问题的测验