为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

POPMUISE 2019-04-07 09:38:41
看,在第九章有这么一个多维数组的例子,代码如下: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]
declareraspointertoarray5ofint
r是指向五个整数的数组的指针,所以它每加1,地址增加五个整数(的数组)的大小。
t是指向单个整数的指针,所以它每加1,地址增加一个整数的大小。
p是指向大小为n的结构的指针,那么它每加1,地址增加n。
                            
查看完整回答
反对 回复 2019-04-07
?
互换的青春

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++只是指向下一个整形,所以步长是1
r++指向的是下一个数组,已经跨越了5个整形,所以步长是5
所以r的步长是t的步长的5倍!~
你可以看看这个答案!
                            
查看完整回答
反对 回复 2019-04-07
  • 2 回答
  • 0 关注
  • 341 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信