看<c专家编程>,在第九章有这么一个多维数组的例子, 代码如下:
int a[2][3][5];
int (*r)[5] = a[0];
int *t = a[0][0];
书中提到
指针所指向的数组的维数不同,其区别很大,以下为例子
r++;
t++;
将会使r和t分别指向它们各自的下一个元素,它们所增长的步长是很不相同的,因为r所指向的数组元素的大小是t所指向的数组元素的大小的三倍.
我用程序输出r和t自增前后的值,如下所示:
before increment, r is 0xbfdfa654
after increment, r is 0xbfdfa668
before increment, t is 0xbfdfa654
after increment, t is 0xbfdfa658
r增长了0x14,即20,t增长了0x4,即4,r的步长是t的步长的五倍,请问怎么会有这种区别?按照
r所指向的数组元素的大小是t所指向的数组元素的大小的三倍
这句话,r的步长不应该是t的三倍才对吗?
另外,怎么分析r和t的定义呢?
多谢
r
是指向五个整数的数组的指针,所以它每加 1,地址增加五个整数(的数组)的大小。t
是指向单个整数的指针,所以它每加 1,地址增加一个整数的大小。p
是指向大小为n
的结构的指针,那么它每加 1,地址增加n
。