c++指针问题
#include <iostream>
using namespace std;
void sss(int *&P,int *&Q);
int main()
{
int c,d;
c=2;
d=6;
int *p,*q;
p=&c;
q=&d;
sss(p,q);
cout < < "p指向的值为: " < <*p < <endl;
cout < < "q指向的值为: " < <*q < <endl;
return 0;
}
void sss(int *&P,int *&Q)
{
int x,y;
x=1000;
y=2000;
P=&x;
Q=&y;
}
输出:p指向的值为1000
q指向的值为-858993460
为什么改成 cout < < "p指向的值为: " < <*p < <endl < < "q指向的值为: " < <*q < <endl;
输出为: p指向的值为1000
q指向的值为2000
[解决办法]
按理说你的输出应该全是乱码随机数才对,
因为你在函数sss里对指针的引用做了修改,
让它指向了局部变量,
而在sss生命结束时,
局部变量被销毁,
指针指向了垃圾,
所以要输出乱码
至于你的输出不全是乱码,
那是因为编译器的原因,
它没有将你的两个指针地址都改变
[解决办法]
而在sss生命结束时,
局部变量被销毁,
指针指向了垃圾,
---------------------
这是对的,但是系统不会修改里面的值,所以在一段时间内,里面的值还是1000,2000,但是系统再次会使用这块内存,这样里面值就变了。
[解决办法]
你的程序中的P,Q 引用了 临时变量 x,y ; 退出时当运行到 第一句输出语句时,你的变量 x的空间还存在,所以打印了 x的值,而在运行完第一句输出语句(覆盖了x,y的值),这样输出就不对了;
你可以像下面那样做实验:
把两句 输出语句改为:
cout < < "p1指向的值为: " < <*p < <endl;
cout < < "p2指向的值为: " < <*p < <endl;
cout < < "q指向的值为: " < <*q < <endl;
或:
cout < < "p1指向的值为: " < <*p < <endl < < "q1指向的值为: " < <*q < <endl;
cout < < "p2指向的值为: " < <*p < <endl < < "q2指向的值为: " < <*q < <endl;
所以你在以后的编程中要注意这种情况
[解决办法]
int x=1000;
int y=2000;
void sss(int *&P,int *&Q);
int main()
{
int c,d;
c=2;
d=6;
int *p,*q;
p=&c;
q=&d;
sss(p,q);
cout < < "p指向的值为: " < <*p < <endl;
cout < < "q指向的值为: " < <*q < <endl;
return 0;
}
void sss(int *&P,int *&Q)
{
P=&x;
Q=&y;
}
试一下