如图*(q)[1][2]和*q[1][2]什么区别还有q++是代表什么意思?最好画个图?orz

如题所述

q是一个数组指针,指向一个数组,该数组包含4行5列整型元素,用int[4][5]表示;

q = &a; // 让q指向a[4][5]

(*q)[3][4] = 1; // 把q=&a代入,相当于 (*&a)[3][4],也就是a[3][4]


首先,aa可以视作3个int[4][5],如下

aa =

int[4][5] // 编号0,即:(aa[0])[4][5] 

int[4][5] // 编号1,即:(aa[1])[4][5]

int[4][5] // 编号2,即:(aa[2])[4][5]

这样的话

q = aa; // 相当于:q = &aa[0]

q++; // 相当于:q = &aa[1] (此处可参考一维数组的指针运算)

(*q)[1][2] = 3; // 把q = &aa[1]代入,得(*&aa[1])[1][2],也就是aa[1][1][2] = 3

*q[1][2] = 5; 

上式理解如下:

首先,q = &aa[1],q[1]相当于*(q+1),即q+1=&aa[2],则原式=*((*(q+1))[2])

其次,(*(q+1))[2],相当于*((*(q+1)) +2) = *(*(q+1) + 2) // 根据操作符优先级,减少一队括号

最后,注意到q+1=&aa[2],所以原式 = *( *(*(q+1) + 2) + 0) = aa[2][2][0]


PS1:三维数组,不太好画图,这样也应该能理解。

PS2:注意到q[1]为*(q+1),即基于q中的地址向后移动一个元素,q+1是这个元素的地址,*(q+1)是这个元素的值,q[1]相当于两步操作。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-12-08
画个图能让我们更直观的看到不一样看到它的存在。
第2个回答  2019-12-08
这个是什么事我都没看到过,我帮不到你,这太复杂了,我脑袋都大。不好意思啊!
相似回答