空指针NULL和内存0地址?

suzhiwei411 2011-03-17 04:34:55
char *str = NULL;
初始化为空指针 ,这时候str的值为0x0;那么这是内存的首地址 吗?空指针不是什么也不指向吗?那么如果要指向一个内存首地址的指针怎么定义呢?
...全文
5061 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
suzhiwei411 2011-03-18
  • 打赏
  • 举报
回复
明白了,谢谢大家
勤奋的沉沦 2011-03-18
  • 打赏
  • 举报
回复 2
#define NULL (void *)0
此乃NULL的真相。
辰岡墨竹 2011-03-18
  • 打赏
  • 举报
回复
在Windows里就是指向内存首地址的指针,本来C语言中一般用(void*) 0作为NULL空指针的值,由C编译器保证空指针不指向任何实际的对象或者函数。Windows里这个是0,别的系统可能是实际是别的值。
只不过在C++系统,由于存在严格的类型转化的要求,所以通常选0作为空指针常量(这是C++标准的推荐值,但没有强制要求)。
不过不管怎么说,因为多数操作系统都保留内存低64KB的区域是不能访问的,所以你一用这个指针肯定出错。
suzhiwei411 2011-03-18
  • 打赏
  • 举报
回复
那如果我就是要一个指向内存首地址的指针呢?怎么赋值?7楼和2楼的说法不一样,2楼说是分配的,如果是分配的,那么也就是说不同的时候这个空指针指向的地址都不一样吗?7楼说他是指向内存的0地址的
jydjdongjie 2011-03-17
  • 打赏
  • 举报
回复
char *p = 0;确实指向内存的零地址,但是操作系统并没有使用零地址附近的空间,所使指针指向零地址是为了使指针指向一个已知的地方防止成为野指针
jingyangjing 2011-03-17
  • 打赏
  • 举报
回复
空指针不指向任何地方,NULL就是一个空指针值,它是不指向任何一个地方的
严格的来说指针并不是为0的
指向一个内存首地址的指针是
int *p = null;
int a[10]={0};
p = &a;

空指针,是分配地址的,但是没有任何值
wbruce 2011-03-17
  • 打赏
  • 举报
回复
char *p = NULL;
0100138E mov dword ptr [p],0
delphiwcdj 2011-03-17
  • 打赏
  • 举报
回复
空指针用0表示,C语言保证这个值不会是任何对象的地址
delphiwcdj 2011-03-17
  • 打赏
  • 举报
回复 2
空指针是一个特殊的指针值,也是唯一一个对任何指针类型都合法的指针值。指针变量具有空指针值,表示它当时处于闲置状态,没有指向有意义的东西。空指针用0表示,C语言保证这个值不会是任何对象的地址。给指针值赋零则使它不再指向任何有意义的东西。为了提高程序的可读性,标准库定义了一个与0等价的符号常量NULL. 程序里可以写 p = 0; 或者 p = NULL; 两种写法都把p置为空指针值。相对而言,前一种写法更容易使读程序的人意识到这里是一个指针赋值。

ouyh12345 2011-03-17
  • 打赏
  • 举报
回复
或者分配,或者指向一个已有的地址
LinuxBirdMan 2011-03-17
  • 打赏
  • 举报
回复
char a = 'a';
char *str = &a;

70,020

社区成员

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

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