读书人

c++指针有关问题

发布时间: 2012-02-26 20:19:44 作者: rapoo

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;
}
试一下

读书人网 >C++

热点推荐