八目i 发表于 2018-11-7 22:37:28

指针运用(求助帖)

数组指针的跨度是什么样子的,为什么一个地址可以存有两个值。

beijudezixuan 发表于 2018-11-8 00:09:52

数组指针的地址跨度,是与指针的类型相关的,int型指针,因为int占4个字节,所以跨度为4,char型指针就跨度为1
对于后面那句话,一个地址应该是不能储存两个值。而且从上述代码中似乎并没有反应出一个地址储存了两个值的现象

八目i 发表于 2018-11-8 13:56:27

beijudezixuan 发表于 2018-11-8 00:09
数组指针的地址跨度,是与指针的类型相关的,int型指针,因为int占4个字节,所以跨度为4,char型指针就跨度 ...

你看那黑框框里的第一排最后一个,和第二排第一个。
这不是同一个地址嘛?

beijudezixuan 发表于 2018-11-8 15:53:33

本帖最后由 beijudezixuan 于 2018-11-8 16:05 编辑

八目i 发表于 2018-11-8 13:56
你看那黑框框里的第一排最后一个,和第二排第一个。
这不是同一个地址嘛?

定义的位置那里 应该是 int (*p)=math,表示是每行之间的跨度为4个下标(换成int型,也就是16个字节)
这样才能知道行间距,也就是行指针之间的地址差.*(p+i)才能指向math [ i ]

八目i 发表于 2018-11-8 19:19:30

beijudezixuan 发表于 2018-11-8 15:53
定义的位置那里 应该是 int (*p)=math,表示是每行之间的跨度为4个下标(换成int型,也就是16个 ...

可是那个为什么不报错,还能正常运行,好像一个地址能存在两个值的样子。

beijudezixuan 发表于 2018-11-8 19:38:55

八目i 发表于 2018-11-8 19:19
可是那个为什么不报错,还能正常运行,好像一个地址能存在两个值的样子。

我试了一下 DEV 和 codeforce网站的在线编译,都会报错的。。
毕竟不同的IDE上的编译环境是有差异的,VS的话,我觉得它是进行了这样的处理,行指针的间距是3个int型变量的时候,那么第四个元素的所在位置其实是第二行的第一个位置。。   
我们设初始地址为start,对于代码来说i=0,j=3, 当前地址=start+j*4   i=1,j=0,当前地址=start+i*3*4
那么它们的地址就指向了相同一个元素也就是4。
所以程序的运行结果实际上是没有显示所有的元素的,因为其中存在着重复元素。
楼主可以把所有的元素值显示出来看看

八目i 发表于 2018-11-8 19:43:41

beijudezixuan 发表于 2018-11-8 19:38
我试了一下 DEV 和 codeforce网站的在线编译,都会报错的。。
毕竟不同的IDE上的编译环境是有差异的, ...

好的,谢谢哈。
(冒昧的问下,能不能把带你学c带你飞的课后习题卖我(现在一次性买不起那个会员),不能你就当没看见。)
页: [1]
查看完整版本: 指针运用(求助帖)