指针定义NULL后无法赋值?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了指针定义NULL后无法赋值?相关的知识,希望对你有一定的参考价值。

int a = 0xa5;
int *p = NULL;
为什么
*P = a;是错的,
p = &a;又是对的。

1、*p = a 是错的,因为这句话的意思是将变量a的值复制并存放到指针p指向的地址空间里。但是你初始化的时候给指针p赋了NULL,即空指针,所以此时p不指向任何地址空间,那么程序无法将a的值放到存储空间里,所以程序报错。
2、p=&a 是对的,因为int a = 0xa5 这一句代码创建了一个int型变量a,给变量a分配了内存,则变量a存储在某块内存上的,这块内存是有地址的。那么p=&a是将a的地址赋值给指针p,则指针p指向变量a的地址空间。所以这句代码是对的。
参考技术A 首先:int *p = NULL;这句话的的意思是未给变量p开辟任何内存空间,那么*p这个语法就会报错,为什么?p还没有开辟内存空间,*p取了个寂寞?但是p = xxxx为什么可以,是这句语法是给p开辟空间并且赋值。
但是你这样写就可以:
int a = 10; int *p = new int; *p = a;这样写是正确的,int *p = NULL和 int *p=new int有本质的区别。或者int *p = (int *)malloc(sizeof(int))希望你能看懂
参考技术B NULL是个地址,这个地址的位置禁止写入数据,所以*P=a是错的
p=&a是把a的地址给P,和*P=a毫无关系啊,你要弄明白它的语义

指针的null是啥意思

如果int *array=NULL;
即 int *array;
array=NULL;
意思是定义一个整型指针变量array,并把它初始化成NULL(空)

那么array指针指向的类型是什么

是int ,还是什么

参考技术A 指针里放的是一个内存地址的值,指向NULL代表这个指针不指向任何地址。但这个指针的类型仍然是int,只不过这个指针没有指向罢了。本回答被提问者采纳 参考技术B array=NULL,表示指针不用访问内存;
你在让它指向一个有效地址就行了;
int a;
array=&a;
*array=5;
参考技术C 指向空(NULL).但它还可以指向别的int值.
比如int b=0;
p=&b;

以上是关于指针定义NULL后无法赋值?的主要内容,如果未能解决你的问题,请参考以下文章

c语言如何给指针参数赋值为null?

delete指针以后应赋值为NULL

请问C语言 char类型的指针要怎么赋值?

在C语言编程中,为啥要将指针变量在开始的时候赋值为NULL?

函数中的 C 指针赋值

C语言 将整型变量赋值为空