指针变量能直接赋值吗?

int * p;
p=2000;
这可以不?
但我看到有的程序写
#define NULL 0
int * p;
p=NULL;
类似于这样
是因为0地址特殊?

指针变量一般是不可以直接赋值的,因为直接赋值的话,就是让这个指针指向这个赋值的地址,万一这个地址是你计算机内部的某个程序的或者是系统的某个地址,而你对这个指针的值又改变了,那么你的计算机系统就会出现问题,可能导致系统不能正常运行活着程序出错等等。但是NULL是一个空地址,即0,它不指向任何地址,所以可以赋值为NULL
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-07-03
p=NULL;是空指针 这个指针没有任何用 但是是最安全的
因为当一个指针不用以后 如果不把他指向0 他很可能与别的地址相同

那样就遭了 而指向0却不会出现这种问题

int * p;
p=2000;这种有可能通过编译 但是这是极其危险的做法 绝对不能这样做
指针只能赋予相应的指针值 或者是0空指针
因此只能表示为
int * p;int a;
p=&a;
或者
p=0;
第2个回答  2012-12-27
0地址特殊?否!这只是个习惯用法。
0 作为空值是有意义的,
因为通常变量的地址不会为0;
对intel86系列CPU来说这里是中断向量表,用户代码是不会改动它的。
其他系统只怕也会一样的,因为C最早并不是用于DOS,WIndows。
而是用来编写UNIX操作系统的;并随操作系统一起发布的。
早期的UNIX并不是在IntelCPU上实现的。
事实上0地址,是可以读取的。当然如今操作系统可能会保护这段内存。
用户态代码只怕不能读取了。
第3个回答  2010-07-03
不能 , NULL代表空地址,是指没有 不是0的意思;
第4个回答  2010-07-03
可以的。 在pc上你设置一个指针等于2000跟设置它等于0实际上是一样的