免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 41181 | 回复: 106
打印 上一主题 下一主题

空指针究竟指向了内存的哪个地方? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-05-13 11:44 |只看该作者 |倒序浏览
大家都知道:
  1. int *p;
  2. p = NULL;
复制代码

是说明p为一个空指针。NULL在"stdio.h"中被宏定义为0(或其他什么常数〈视编译器而定〉),而这样又并不是说p指向的地址为0,那么各位大侠,这时p究竟指在哪儿呢?不会就这么悬着吧?!

望高手告知其中的细节。不胜感激!!

论坛徽章:
0
2 [报告]
发表于 2005-05-13 11:48 |只看该作者

空指针究竟指向了内存的哪个地方?

以前有过讨论,搜索论坛看看。好象精华中也有。

论坛徽章:
0
3 [报告]
发表于 2005-05-13 12:44 |只看该作者

空指针究竟指向了内存的哪个地方?

空指针指向你进程私有地址的0地址,,它不会被分配出去,,主要的不是null指在哪,而是如果指向null,我们的代码就可以用if(ptr)来判断它是不是有效的指针,不过,如果这个指针不是指向0,也有可能不是个有效的指针,,所以建议程序员在定义指针时把它初始化为0,

论坛徽章:
0
4 [报告]
发表于 2005-05-13 17:18 |只看该作者

空指针究竟指向了内存的哪个地方?

受教

论坛徽章:
0
5 [报告]
发表于 2005-05-13 17:25 |只看该作者

空指针究竟指向了内存的哪个地方?

NULL不一定是0!这句话是俺今天第二次说。
NULL只是一个概念,叫作空值,其值本身没有任何含义,可以用0代替,也可以用1,...代替,只要这些值不会与系统实际的有效地址冲突即可。
因此,本人在此再次强调,不要自作聪明地认为NULL就是0,要判断的时候还是老老实实地与NULL做比较,别想当然地用什么!ptr之类的写法,因为在某个特定环境下,NULL可能不是0,而系统函数返回的是NULL不是0,那时,你的函数就会出现莫名其妙的错误。所以,养成良好的习惯是非常重要的。
忘了是谁第一个用了!ptr这样的写法,这个人该杀!害了多少人啊!

论坛徽章:
0
6 [报告]
发表于 2005-05-13 17:29 |只看该作者

空指针究竟指向了内存的哪个地方?

原帖由 "FH" 发表:

别想当然地用什么!ptr之类的写法,....

印象中好象林锐写的《高质量c/c++编程指南》上就是这么提倡的。

论坛徽章:
0
7 [报告]
发表于 2005-05-13 23:42 |只看该作者

空指针究竟指向了内存的哪个地方?

空指针保证不是一个合法地址,这是标准规定的。

论坛徽章:
0
8 [报告]
发表于 2005-05-14 01:18 |只看该作者

空指针究竟指向了内存的哪个地方?

原帖由 "kj501" 发表:

印象中好象林锐写的《高质量c/c++编程指南》上就是这么提倡的。


那说明他就该杀!他的书是垃圾!审稿的人也是饭桶!
qunying 该用户已被删除
9 [报告]
发表于 2005-05-14 01:50 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
10 [报告]
发表于 2005-05-14 01:55 |只看该作者

空指针究竟指向了内存的哪个地方?

没觉得楼上引用的文字与俺的见解有什么冲突,相反,说得比俺更过火。比如:“每种指针类型都有一个空指针, 而不同类型的空指针的内部表示可能不尽相同。”再如:“空指针的内部 (或运行期) 表达形式, 这可能并不是全零, 而且对不用的指针类型可能不一样。”
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP