有以下语句定义
int a[2][3]; int (*p)[3]=a; int *q=*a;
则不能输出a[1][2]的值的语句是()
A. printf("%d", *(*(a+1)+2)); B. printf("%d", p[1][2]); C. printf("%d", *(q+5)); D. printf("%d", q[1][2]);
首先,我们需要明确数组a的存储结构。int a[2][3]是一个二维数组,存储了6个整数,按照行优先的顺序存储。
int (*p)[3]=a; 定义了一个指向含有3个整数的数组的指针p,并将它指向a。 int *q=*a; 这里,*a实际上是一个指向a[0][0]的指针,所以q是一个指向整数的指针,并被初始化为指向a[0][0]。 现在,我们逐个分析选项:
A. printf("%d", *(*(a+1)+2));
*(a+1) 是取得a的第二行(即a[1]),*(a+1)+2 则是取得第二行的第三个元素(即a[1][2])。因此,这个语句是正确的。 B. printf("%d", p[1][2]);
p是一个指向含有3个整数的数组的指针,所以p[1]取得的是第二行,p[1][2]则是第二行的第三个元素。因此,这个语句也是正确的。 C. printf("%d", *(q+5));
q是一个指向整数的指针,并被初始化为指向a[0][0]。所以,q+5将指向a[1][2]。这个语句也是正确的。 D. printf("%d", q[1][2]);
q是一个指向整数的指针,不是一个二维数组或数组的数组,所以不能使用q[1][2]的形式来访问。这个语句是错误的。 因此,不能输出a[1][2]的值的语句是D选项。
应该是A选项,题错了
快乐小土狗 回复 王先生考上了: A没有问题,明显是D语法有问题。。
王先生考上了 回复 快乐小土狗: 谢谢大佬
D
用户登录可进行刷题及查看答案
登录后提交答案