一个指针在定义后是应该被付值为0,还是NULL?

yeahchang 2003-11-05 06:44:29
好像微软付为NULL(NULL,0,void*有何区别?)


(原来记得有过类似的文章,但现在找不着了!)
...全文
154 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
palstu 2003-11-06
  • 打赏
  • 举报
回复
在头文件stido.h中,NULL是0的宏定义
#define NULL 0
TianGuangZao 2003-11-06
  • 打赏
  • 举报
回复
comp.lang.c 对这类常见问题有详细的 FAQ 解答。
http://www.eskimo.com/~scs/C-faq/s5.html
danielhf 2003-11-05
  • 打赏
  • 举报
回复
在C++中, 给指针赋0是安全的,表示它不指向任何对象, C中有些不好的习惯, 比方说#define

(void*)0 是一个C转换,表示是一个指针, 而0在默认情况下是一个int.
短歌如风 2003-11-05
  • 打赏
  • 举报
回复
C允许从void*到任意指针的隐式转换,而C++是不允许的,但允许整数0到任意指针的转换。
在C++中,
int * a;
a = (vod*) 0;是不行的,因此C++中要把NULL定义为0而不是((void*)0)。

无论在C++中还是在C中,都应该用NULL。也许某一天C++语言就会改为不允许整数0到指针的转换而改用一个关键字表示空指针。这时把NULL重定义一下就行了。用0表示空指针的代码都是为了少包含一个头文件。

yeahchang 2003-11-05
  • 打赏
  • 举报
回复
/* _null.h

Definition of NULL.

*/

/*
* C/C++ Run Time Library - Version 10.0
*
* Copyright (c) 1987, 2000 by Inprise Corporation
* All Rights Reserved.
*
*/

/* $Revision: 9.1 $ */

#ifndef NULL
# if defined(__cplusplus) || defined(_Windows)
# define NULL 0
# else
# define NULL ((void *)0)
# endif
#endif



那0和(void *)0有什么不同??
wongsung 2003-11-05
  • 打赏
  • 举报
回复
正规一点应该用NULL
指针会指向如下地址
0X00000000
tonybaobao 2003-11-05
  • 打赏
  • 举报
回复
定义了一个指针,最好赋予一个特定的内存单元。不推荐赋0的。
liubingqian 2003-11-05
  • 打赏
  • 举报
回复
上面错了,是
#define NULL 0
liubingqian 2003-11-05
  • 打赏
  • 举报
回复
在C++中用0的多,而C中用NULL的多。其实是习惯问题。
liubingqian 2003-11-05
  • 打赏
  • 举报
回复
在stdio.h中是这样定义的:
#define 0 NULL
所以它们是一样的。
hawkxjy 2003-11-05
  • 打赏
  • 举报
回复
没有区别的,都是一样的

VC中,用宏定义把0和NULL定位相同的。

69,371

社区成员

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

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