int *p=new int;
*p=3000;
delete p;
p=0;
int i;
p=&i;
请问为什么给指针p赋值为3000的时候要加星号 ,而把指针赋为0却不加星号,还有用指针保存其它变量的地址也不用加星号. 越详细越好 答得好的加分.
你的意思是说当创建一个new空间,这个new空间就已经有一个内存地址了是吗?
而指针指向的是这个new空间的地址?*p=3000是吧3000的内存地址放到这个new空间.
用delete是清空这个new空间的地址,p=0是清空指针的地址?
上面有位朋友说*p=&i和p=&i是一样的,但是我用vc运行提示错误.
这里要怎么去理解!
delet 的作用是 释放指针所指向的空间,使这段空间又可以被其他变量使用。
如果delet后不把p设为0,指针p还是可以调用的(非法操作) ,不过系统会将这块空间继续分配给其他程序或变量使用,其结果可想而知。
上面有位朋友说*p=&i和p=&i是一样的,但是我用vc运行提示错误.
*p=&i和p=&i 是不一样的。提示错误是因为 你已经把p清空为0 了,也就是指针p没有指向某个地址,*p=&i 当然就报错了
释放了p再调用p还是可以的,但如图 我调试的时候就有问题。
建议仔细看看指针的章节。
无语。。。。
我在非也非夜那位朋友那提交了追问,能帮忙看下我理解的对不对吗?
追答其他都是对的,只有“而指针指向的是这个new空间的地址?*p=3000是吧3000的内存地址放到这个new空间”这个不对,*p=3000;表示将指针p所表示的地址指向的空间赋值为3000。不是把3000的内存地址放到这个new空间。
上面有位朋友说*p=&i和p=&i是一样的,但是我用vc运行提示错误.
--这个是不对的,p=&i是给指针赋值,*p=&i应该是报错的吧?