免费注册 查看新帖 |

Chinaunix

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

[C] C语言保证,0永远不是有效的数据地址。是什么意思? [复制链接]

论坛徽章:
1
白羊座
日期:2014-03-22 18:23:03
11 [报告]
发表于 2012-12-23 19:54 |只看该作者
回复 7# Ager

bazinga。。。。。好吧。。。大脑暂时短路了。。问这个问题。。。
   

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
12 [报告]
发表于 2012-12-23 20:24 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
13 [报告]
发表于 2012-12-23 20:25 |只看该作者
回复 11# _HellAngel_

LZ。
我倒觉得这个问题真没那么简单,如果0不是一个有效的数据地址,那么1也99%不是一个有效的数据地址。那1%我也不敢保证,因为没研究那么深入,涉及到寻址
所以
  1. #define NULL 1
复制代码
也是几乎不会出问题的,虽然有点恶搞
有趣的问题= =

论坛徽章:
0
14 [报告]
发表于 2012-12-23 20:28 |只看该作者
本帖最后由 sqfasd 于 2012-12-23 20:29 编辑

回复 13# sqfasd

错了错了,有点误导

NULL为0与NULL为1绝对是不能相等的。

我举得例子是想说明1也不可能是一个有效数据地址

论坛徽章:
1
白羊座
日期:2014-03-22 18:23:03
15 [报告]
发表于 2012-12-23 20:38 |只看该作者
回复 13# sqfasd

噗。。。哈哈哈。。。好吧= =。。暂时就这样吧- -。。我觉得我看得有些慢了= =。。
   

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
16 [报告]
发表于 2012-12-23 20:38 |只看该作者
静态语言保证不了,它不知道内存里的什么东西是不是0,更不知道你把这个0取出来会不会当address来操作。
一般情况下地址0是在mmu里做的映射,由操作系统保证对它进行address操作会出异常。
当然考虑到操作系统和C的好基友关系,认为C也有这样的保证也不是什么大问题。

论坛徽章:
1
白羊座
日期:2014-03-22 18:23:03
17
发表于 2012-12-23 20:40
回复 12# pmerofc

逆否命题耶。。哈哈哈。。。谢了。。来看我这么NC的问题= =
   

论坛徽章:
1
白羊座
日期:2014-03-22 18:23:03
18 [报告]
发表于 2012-12-23 20:43 |只看该作者
回复 16# gvim


恩= =。。我觉得我问错问题了。。这问得太不科学了。。谢谢啊谢谢= =。。

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
19 [报告]
发表于 2012-12-23 20:51 |只看该作者
回复 18# _HellAngel_

这不是不科学的问题,逻辑地址0是不是有效地址仅是C的约定,你完全可以在MMU里把逻辑0(或者连同0在内的4K)映射成有效且合法的地址,C范畴里面一个地址有没有效只有MMU说了算,当然乱映射之后虽然还是C,只是不再是标准C,就如同很多平台或语言把下标1作为数组的第一个元素一个道理。

论坛徽章:
1
白羊座
日期:2014-03-22 18:23:03
20 [报告]
发表于 2012-12-23 20:55 |只看该作者
回复 19# gvim


SOGA。。。恩。。谢谢。。。是约定好的。。  
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP