看,在第九章有这么一个多维数组的例子,代码如下:inta[2][3][5];int(*r)[5]=a[0];int*t=a[0][0];书中提到指针所指向的数组的维数不同,其区别很大,以下为例子r++;t++;将会使r和t分别指向它们各自的下一个元素,它们所增长的步长是很不相同的,因为r所指向的数组元素的大小是t所指向的数组元素的大小的三倍.我用程序输出r和t自增前后的值,如下所示:beforeincrement,ris0xbfdfa654afterincrement,ris0xbfdfa668beforeincrement,tis0xbfdfa654afterincrement,tis0xbfdfa658r增长了0x14,即20,t增长了0x4,即4,r的步长是t的步长的五倍,请问怎么会有这种区别?按照r所指向的数组元素的大小是t所指向的数组元素的大小的三倍这句话,r的步长不应该是t的三倍才对吗?另外,怎么分析r和t的定义呢?多谢
2 回答
HUH函数
TA贡献1836条经验 获得超4个赞
cdecl>explainint(*r)[5]declareraspointertoarray5ofintr是指向五个整数的数组的指针,所以它每加1,地址增加五个整数(的数组)的大小。t是指向单个整数的指针,所以它每加1,地址增加一个整数的大小。p是指向大小为n的结构的指针,那么它每加1,地址增加n。
互换的青春
TA贡献1797条经验 获得超6个赞
t指向一维数组的第一个元素,这个一维数组有5个元素!并且t最多只能增加到4,也就是t能访问到的元素就只有t[0],t[1],t[2],t[3],t[4]这5个元素!(当然,如果t指向的不是a[1][2],t也可以访问其他元素,否则就会越界)r指向二维数组的第一维,数组有5个元素,r++之后就指向二维数组中的下一个一维数组,数组同样有5个元素!但是r的值最多只能增加到2(从0开始),所以r指针能够访问到的元素个数就是3*5=15个!所以,r指向的数组15个元素/t指向的数组5个元素=3倍~~~!t++只是指向下一个整形,所以步长是1r++指向的是下一个数组,已经跨越了5个整形,所以步长是5所以r的步长是t的步长的5倍!~你可以看看这个答案!
添加回答
举报
0/150
提交
取消