
关于C语言中数组元素的引用问题
有这样一道二级的真题:若有以下程序段:inta[12]={0},*p[3],**pp,i;for(i=0;i<3;i++)p[i]=&a[i*4];pp=p;则对数组元素...
有这样一道二级的真题:
若有以下程序段:
int a[12]={0},*p[3],**pp,i;
for(i=0;i<3;i++)
p[i]=&a[i*4];
pp=p;
则对数组元素的错误引用是______
A.pp[0][1] B.a[10] C.p[3][1] D.*(*(p+2)+2)
答案选C,我想是因为3超出了范围吧。
B肯定是对的。
那么A和D该怎么理解呢?
能不能归纳一下C语言里面数组元素引用的问题? 展开
若有以下程序段:
int a[12]={0},*p[3],**pp,i;
for(i=0;i<3;i++)
p[i]=&a[i*4];
pp=p;
则对数组元素的错误引用是______
A.pp[0][1] B.a[10] C.p[3][1] D.*(*(p+2)+2)
答案选C,我想是因为3超出了范围吧。
B肯定是对的。
那么A和D该怎么理解呢?
能不能归纳一下C语言里面数组元素引用的问题? 展开
2个回答
展开全部
A: int **pp;表示pp所指的是一个二维数组,所以它的引用可以这样用pp[][]的形式;
D: 因为p[i]=&a[i*4];有p[0]=&a[0],所以*(p+2),
即p[2],指的是a[8];
*(*(p+2)+2)指的就是a[10];
p[0]-> a[0] a[1] a[2] a[3]
p[1]-> a[4] a[5] a[6] a[7]
p[2]-> a[8] a[9] a[10] a[11]
C的错误就在于行指针超出范围:最大只能是2
D: 因为p[i]=&a[i*4];有p[0]=&a[0],所以*(p+2),
即p[2],指的是a[8];
*(*(p+2)+2)指的就是a[10];
p[0]-> a[0] a[1] a[2] a[3]
p[1]-> a[4] a[5] a[6] a[7]
p[2]-> a[8] a[9] a[10] a[11]
C的错误就在于行指针超出范围:最大只能是2
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询