大神哪位知道,c语言若有下列说明和语句:int a[4][5], (*p)[5]; p = a; 则对a数组元素?
c语言若有下列说明和语句:int a[4][5], (*p)[5]; p = a; 则对a数组元素的正确引用A) p+1 B) *(p+3) C) *(p+1)+3 D) *(*p+2)
答案是D。但我不知道为什么,请帮我解释详细一点,谢谢!
大神哪位知道,c语言若有下列说明和语句:int a[4][5], (*p)[5]; p = a; 则对a数组元素?
c语言若有下列说明和语句:int a[4][5], (*p)[5]; p = a; 则对a数组元素的正确引用2024-09-14 17:48:08
如果定义int (*p)[n];p1=a;p1++后,p指向a[1][0];
则p+j将指向a[0]数组中的元素a[0][j]。
由于a[0]、a[1]┅a[M-1]等各个行数组依次连续存储,则对于a数组中的任一元素a[i][j],指针的一般形式如下:
p+i*N+j,相应的如果用p来表示,则为*(p+i)+j;
元素a[i][j]相应的指针表示为:
*( p+i*N+j) ,相应的如果用p1来表示,则为*(*(p+i)+j)。
推出以下的等价关系:
a+i == p+i;
a[i] == p[i] == *(a+i) == *(p+i);
a[i][j] == p[i][j] == *(a[i]+j) == *(p[i]+j) == *(*(a+i)+j) == *(*(p+i)+j)。
扩展资料:
对上述
而a是一个二维数组的名字,它指向的是它所属元素的首元素,它的每一个元素都是一个行数组,因此,它的指针移动单位是“行”,所以a+i指向的是第i个行数组,即指向a[i]。对a进行“*”运算,得到的是一维数组a[0]的首地址,即*a与a[0]是同一个值。
参考资料:
2024-09-14 18:37:54
2024-09-14 21:32:07
2024-09-14 11:59:43