C语言:关于指针NULL的问题!!!!望好人帮帮我哦哈

来源:百度知道 编辑:UC知道 时间:2024/06/09 10:55:37
书上说NULL对暂时不用的指针变量赋初值
如 int *p=NULL

但书上又说企图用*p=5给p所指向的存储单元赋值,则系统将给用户一个错误信息

为什么呢?
赋初值之后想用到这个指针变量了 想赋5 哪里不可行了?我这里没弄懂

*p是个指针,指针是指向一个地址的,地址里面存放的才是值,int *p=NULL,意思是没有指向任何地址,更不要说地址里面的值了,如果你程序里想让P指向一个值,先得让他指向一个地址,比如说 int *p=&a 意思是给P分配了一个整型长度内存空间a,就是说给他分配了一个地址空间,然后再给这个地址赋值*p=5;就可以了。

再次强调: int *p=&a;这和int *p=NULL意思是完全不一样的,int *p=NULL意思是P根本就没指向一个具体可用空间。int *p=&a 意思是分配了一个整型长度内存空间a,只不过里面没放任何值并且让P指向这个空间。
ACoreOS同学;
这么晚还没睡。呵呵,int *p=&a和int *p=NULL意思完全不一样的,int *p=NULL虽然给*p本身分配了一个空间但是p本身没有指向任何东西(指向0,这个不是内存中确切的地址),但是int *p=&a 不一样,&a不仅给A分配了个地址而且使P指向这个地址,这个地址是个确切空间,你打印一下p,发现他绝对不是0,而且一个内存地址的。我第一次的回答可能有些歧义,我已经改了。

5是常数,不是变量,在内存中的地址不是固定,初始指针必须指向一个变量的地址。

*p=5的意思是“把p指向的内存地址内容改为5”
但是你不清楚p指向的内存地址是多少?
可能是栈上的一个地址
也可能是静态数据区
还可能是系统核心数据区
p的地址是随机的
当然不能随便给*p赋值了
除非你能够确认p是指向一个变量的
如:
int *p, a;
p = &a;

针对bdaker同学,我多说一句:
int *p=&a和int *p=NULL意思一样,都是对p赋值,前者是将a的地址赋给p,后者是把NULL(也就是0地址)赋给p
当我们写下int *p的时候,就已经为p分配了一个空间,p也是变量,定义p当然就是为p分配内存空间了