您好,匿名用户
随意问技术百科期待您的加入

c专家编程一个例子的疑问

+1 投票

看<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的定义呢?

多谢

用户头像 提问 2013年 9月9日 @ Miss Fortune 上等兵 (418 威望)
分享到:

1个回答

0 投票
cdecl> explain int (*r)[5]
declare r as pointer to array 5 of int

r 是指向五个整数的数组的指针,所以它每加 1,地址增加五个整数(的数组)的大小。

t 是指向单个整数的指针,所以它每加 1,地址增加一个整数的大小。

p 是指向大小为 n 的结构的指针,那么它每加 1,地址增加 n

用户头像 回复 2013年 9月9日 @ Sagittarius 上等兵 (289 威望)
提一个问题:

相关问题

0 投票
1 回复 8 阅读
用户头像 提问 2014年 3月30日 @ Nidalee 上等兵 (346 威望)
0 投票
1 回复 37 阅读
用户头像 提问 2012年 12月1日 @ Shyvana 上等兵 (214 威望)
0 投票
1 回复 38 阅读
用户头像 提问 2012年 12月1日 @ Talon 上等兵 (294 威望)
0 投票
1 回复 32 阅读
用户头像 提问 2013年 12月15日 @ Fiddlesticks 上等兵 (242 威望)
0 投票
1 回复 37 阅读

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...