免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: pmerofc
打印 上一主题 下一主题

[C] 请教一个基础问题——数组名减1是否可以 [复制链接]

论坛徽章:
0
161 [报告]
发表于 2009-12-18 23:58 |只看该作者
围观~~
其实那个 Segment+Offset 的例子相当生动形象了~~
IA-32 的 FLAT 内存结构的确掩盖了太多东西~

论坛徽章:
0
162 [报告]
发表于 2009-12-19 01:33 |只看该作者
学习了~ 在此之前还真不知道数组名减1是未定义...

那么,
int a[5];
为什么C标准要规定a+5是不溢出的, a-1却是未定义的呢? 其中还有什么玄机么?

其实我觉得讨论标准"是什么"没有多大意义, 讨论"为什么"更有意思一些... 所以也希望高人指点啊~

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
163 [报告]
发表于 2009-12-19 02:32 |只看该作者

回复 #152 pmerofc 的帖子

不敢……   我以前也在这问题上栽过, 用index反向遍历数组的时候,所以使用index反向遍历写得很顺
经过这翻讨论之后, 用pointer反向遍历也应该写得很顺了

ok, 在这这帖子里, 我不鸟那些sao人了, 免得降低了帖子的质量
不过逗逗他们真的很好玩啊

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
164 [报告]
发表于 2009-12-19 02:37 |只看该作者

回复 #161 变异老鼠 的帖子

我也就只能想出 segment + offset了…… 因为学过x86 16位汇编……

在32位平坦模型上, 将指针理解为一个数,可以帮助理解内存模型。
如果要跳出这种平台, "将指针理解为一个数", 就不再是帮助, 而是障碍了。

需要从新理解指针, 它究竟能干什么, 它描述的是怎样的模型。
因为我也没机会在怪异的平台下开发, 就只能凭空想 + 标准了。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
165 [报告]
发表于 2009-12-19 02:50 |只看该作者

回复 #162 kouu 的帖子

为了编程方便? 不能引用前一个元素, 就已经使得反向遍历时写起来不是特别爽了。
如果超过末尾一个元素也不能引用, 用指针正向遍历要怎么写?

至于为什么偏袒超过末尾一个元素……  可能正向遍历比较多吧……

论坛徽章:
0
166 [报告]
发表于 2009-12-19 17:34 |只看该作者
原帖由 OwnWaterloo 于 2009-12-19 02:37 发表
我也就只能想出 segment + offset了…… 因为学过x86 16位汇编……

在32位平坦模型上, 将指针理解为一个数,可以帮助理解内存模型。
如果要跳出这种平台, "将指针理解为一个数", 就不再是帮助, 而是障碍 ...


在 c/c++ 语言层面上

你提出 segment + 0ffset 作为指针形式的观点是不合适的。

segment + 0ffset 是系统管理层面上的概念,是 processor 和 OS 内存管理的范畴。

c 中指针理解为一个数并没什么不对,程序中的指针的数要么属于虚拟地址,要么是线性地址。

无论最终的线性地址是怎样转换得来的。那是 processor / OS 的事,与 C 本身无关

论坛徽章:
0
167 [报告]
发表于 2009-12-19 17:38 |只看该作者
原帖由 mik 于 2009-12-19 17:34 发表


在 c/c++ 语言层面上

你提出 segment + 0ffset 作为指针形式的观点是不合适的。

segment + 0ffset 是系统管理层面上的概念,是 processor 和 OS 内存管理的范畴。

c 中指针理解为一个数并没什么不 ...

我前脚才从这个泥潭跨出去,你后脚又想跨回来

论坛徽章:
0
168 [报告]
发表于 2009-12-19 17:42 |只看该作者
没想到这个贴子能翻这么多页

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
169 [报告]
发表于 2009-12-19 17:53 |只看该作者

回复 #166 mik 的帖子

114楼看过吗?

论坛徽章:
0
170 [报告]
发表于 2009-12-19 18:09 |只看该作者
原帖由 OwnWaterloo 于 2009-12-19 17:53 发表
114楼看过吗?

整篇贴子都看过
那些话能说明什么?


我问你一个问题:

指针值为 0x08040020, 这个地址数值 你能想到它代表什么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP