关于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;
} 展开
#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;
} 展开
1个回答
展开全部
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;
}
{
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指向的地址是不是相同的,所以你要测试的话,应该去掉&
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询