关于c++指针的疑问?定义第一个指针,将其delete,再定义第二个指针,再为第一个指针赋值,为什么第二个指

关于c++指针的疑问?定义第一个指针,将其delete,再定义第二个指针,再为第一个指针赋值,为什么第二个指针会跟第一个一样?#include<iostream>usin... 关于c++指针的疑问?定义第一个指针,将其delete,再定义第二个指针,再为第一个指针赋值,为什么第二个指针会跟第一个一样?
#include<iostream>
using namespace std;
int main()
{
int *p=new int;
*p=3;
cout<<"p指针的地址"<<&p<<endl;
cout<<"p所指地址的值"<<*p<<endl;
delete p;
long *p1=new long;
*p1=999999;
cout<<"p1指针的地址"<<&p1<<endl;
cout<<"p1所指地址的值"<<*p1<<endl;
*p=23;
cout<<"改变p后 p1指针的地址"<<&p1<<endl;
cout<<"改变p后 p1所指地址的值"<<*p1<<endl;
cout<<"delect p后指针的地址"<<&p<<endl;
cout<<"delect p后所指地址的值"<<*p<<endl;
return 0;
}
展开
 我来答
Clor001
2012-04-12 · TA获得超过803个赞
知道小有建树答主
回答量:399
采纳率:0%
帮助的人:377万
展开全部
int main()
{
int *p=new int;
*p=3;
cout<<"p指针的地址"<<&p<<endl;
cout<<"p所指地址的值"<<*p<<endl;
delete p;//你只是释放了p所指向的内存对象,而p依然指向这里,你应该 p = NULL,否则p是野指针,依然指向此地址,但是这个地址已经不属于你了
long *p1=new long;//问题出在这里,编译器为你分配空间,就是刚刚释放的空间
*p1=999999;
cout<<"p1指针的地址"<<&p1<<endl;
cout<<"p1所指地址的值"<<*p1<<endl;
*p=23;//使用野指针赋值是危险的,问题也出在这里,你修改的是p1指向的地址的值,所以一样
cout<<"改变p后 p1指针的地址"<<&p1<<endl;
cout<<"改变p后 p1所指地址的值"<<*p1<<endl;
cout<<"delect p后指针的地址"<<&p<<endl;
cout<<"delect p后所指地址的值"<<*p<<endl;
return 0;
}
追问
可是我打印他们两个指针的时候地址是不一样的?书上说是一样的,不知道为什么了
追答
p,p1本身的地址没有意义啊,
你知道这两地址不能证明任何东西啊。
指针本身的地址只是个栈内临时变量的地址。
p,p1指向的是堆上的地址,也是你要测试的变量的地址。
我们要知道的是 p,p1指向的地址是不是相同的,所以你要测试的话,应该去掉&
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式