null指针和内存0地址 区别

troy294846189 2011-11-30 04:42:32
rt,他们是不是一个概念?
null指针是指针变量还是指针?我们常说的“指针指向一个实体”还是“指针变量指向一个实体”?
谢谢了
...全文
1037 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
lin5161678 2012-10-09
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 的回复:]

说说看,NULL什么时候不是0?
[/Quote]

#17楼的大大 已经解释得很清楚的了
The macros are
NULL
which expands to an implementation-defined null pointer constant
宏NULL为实现定义的空指针常数

既然是实现定义的 那么就可以是0 也可以不是0
lin5161678 2012-10-09
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:]

The macros are
NULL
which expands to an implementation-defined null pointer constant
[/Quote]
哦哦 看到了 由实现定义 清楚明白了
lin5161678 2012-10-09
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]

Pointers and integers are not interchangeable. Zero is the sole exception: the constant zero may be assigned to a pointer, and a pointer may be compared with the constant zero. The symbolic constant NULL is often used in place of zero, as a mnemonic to indicate more clearly that this is a special value for a pointer. NULL is defined in <stdio.h>.
[/Quote]

这个语气 怎么看都是留有余地 好像不能说明 NULL 恒为 0
NULL作为空指针常量 并不一定得实现为 0
保证NULL不会指向有效地址就好了
lxk880827 2012-05-18
  • 打赏
  • 举报
回复
我觉得这个问题和具体的实现有关系,也和编译器等有关
Esakyo 2011-12-28
  • 打赏
  • 举报
回复
哈哈,原来如此~
「已注销」 2011-12-02
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 huxizero10 的回复:]

NULL是一个有多意的标示符,和左值有关,不过,由于有错误倾向,所以C++中用nullprt取代空指针,不过Visual Studio 11和最新版的GCC才支持
[/Quote]

很遗憾,俺不用C++
yht8708 2011-12-02
  • 打赏
  • 举报
回复
majia2011 2011-12-02
  • 打赏
  • 举报
回复
那么_t更不要用了,哈哈哈
「已注销」 2011-12-01
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 crakme 的回复:]

#define NULL ((void *)0)
[/Quote]

No,

#define NULL 0
江北百晓生 2011-12-01
  • 打赏
  • 举报
回复
NULL是一个有多意的标示符,和左值有关,不过,由于有错误倾向,所以C++中用nullprt取代空指针,不过Visual Studio 11和最新版的GCC才支持
「已注销」 2011-12-01
  • 打赏
  • 举报
回复
NULL就是0,诸位不要玩神秘主义。

在GNU STL的编码规则里,明确要求不要在指针初始化时用null或NULL,而使用常数0,并说了一通道理(具体我忘了)。
赵4老师 2011-12-01
  • 打赏
  • 举报
回复
DOS下可以访问地址0,它是中断向量0的入口地址。但和NULL没关系。
「已注销」 2011-12-01
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 lanmanck 的回复:]

引用 21 楼 sinservice 的回复:
引用 14 楼 crakme 的回复:

#define NULL ((void *)0)


No,

#define NULL 0

NULL 有的时候不是0,不要混淆。
[/Quote]

说说看,NULL什么时候不是0?
酒鬼 2011-12-01
  • 打赏
  • 举报
回复
嘻嘻,这个问题我好像也能回答。
null是没有值的意思,而0,或者有的上面预定义成的NULL,其实是一个确定的值,也就是数值0,当把这个0值作为地址赋予指针时,你若再访问这个指针,它指向的地址0肯定不是你用户态程序能访问的,也就会出错。
一个指针没赋值的时候可能是 null,你可以判断,或者将其赋值为NULL(或0),但你肯定不能将其赋值为null了。如果你删除指针,delete,那也只是释放了指针(值)地址所指向的内存,并没改变指针的值,一般防止野指针,会将其再赋值为NULL,大致这样。
共同交流,如果我的理解有错,还希望高手们指教
AnYidan 2011-12-01
  • 打赏
  • 举报
回复
The macros are
NULL
which expands to an implementation-defined null pointer constant
AnYidan 2011-12-01
  • 打赏
  • 举报
回复
Pointers and integers are not interchangeable. Zero is the sole exception: the constant zero may be assigned to a pointer, and a pointer may be compared with the constant zero. The symbolic constant NULL is often used in place of zero, as a mnemonic to indicate more clearly that this is a special value for a pointer. NULL is defined in <stdio.h>.

the c programming language page 92
w28050 2011-12-01
  • 打赏
  • 举报
回复
家是家,家的地址是地址。
crakme 2011-12-01
  • 打赏
  • 举报
回复
#define NULL ((void *)0)
飞天御剑流 2011-12-01
  • 打赏
  • 举报
回复
0是NULL的实现,但NULL不是0!
moon___star 2011-12-01
  • 打赏
  • 举报
回复
null表示该指针不指向任何内存单元,0表示指向地址为0的单元
加载更多回复(12)

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧