指针定义NULL后无法赋值?
inta=0xa5;int*p=NULL;为什么*P=a;是错的,p=&a;又是对的。...
int a = 0xa5;
int *p = NULL;
为什么
*P = a;是错的,
p = &a;又是对的。 展开
int *p = NULL;
为什么
*P = a;是错的,
p = &a;又是对的。 展开
3个回答
展开全部
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的地址空间。所以这句代码是对的。
2、p=&a 是对的,因为int a = 0xa5 这一句代码创建了一个int型变量a,给变量a分配了内存,则变量a存储在某块内存上的,这块内存是有地址的。那么p=&a是将a的地址赋值给指针p,则指针p指向变量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))希望你能看懂
但是你这样写就可以:
int a = 10; int *p = new int; *p = a;这样写是正确的,int *p = NULL和 int *p=new int有本质的区别。或者int *p = (int *)malloc(sizeof(int))希望你能看懂
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
NULL是个地址,这个地址的位置禁止写入数据,所以*P=a是错的
p=&a是把a的地址给P,和*P=a毫无关系啊,你要弄明白它的语义
p=&a是把a的地址给P,和*P=a毫无关系啊,你要弄明白它的语义
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询