NULL指针能在赋值吗?

指针在使用前要进行初始化,我将指针初始化为NULL,再对它赋值,为啥不行呢?
#include<stdio.h>
void main()
{
int *a = NULL;
*a = 3;
printf("%d",*a);
}
我用malloc动态申请内存后,free掉这段内存,指向这段内存的指针在被赋值为NULL后还能在用吗?再用它指向别的地方,可以吗?

void main()
{
int *a = NULL; // 定义了a指针变量,指向NULL
*a = 3; //问题出在这里,*a指向的是NULL,也就是a没有指向任何变量,你把一个常量3赋值给一个不存在的NULL,是行不通的。
printf("%d",*a);
}

我用malloc动态申请内存后,free掉这段内存,指向这段内存的指针在被赋值为NULL后还能在用吗?再用它指向别的地方,可以吗?

Free掉以后最好把指针指向NULL,如果不指向的话,依然指向这块内存区域,如果你不小心,就使用了该指针,修改指针指向的区域,但是这个内存区域和你已经没有任何关系了,
你就破坏了其他有用的数据,俗称野指针,你可以百度一下哦。危害很大的。
再用它指向别的地方是可以的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-11-01
指针初始化为NULL,还是没有分配内存,所以要报错。
指针是个变量。就是个装地址的变量。是变量就可以重复使用。
free掉,并且指向NULL,再分配内存(初始化指向别的地方)又可以用了。
之所哟free掉了再指向NULL是防止误用了野指针修改随机内存。本回答被提问者采纳
第2个回答  2011-08-27
这两个“*“的含义其实是不一样的。
定义int *a中“ * "是指针的意思,表示a是一个指针。
而*a中" * "的作用是“引用”,即引用地址a的值,但是空地址不可以引用。
相似回答