主题:关于指针的问题 为什么两次输出的值不同
sunnylp
[专家分:0] 发布于 2012-04-16 00:34:00
#include <iostream>
using namespace std;
int * getPtr(){
int number = 3;
return &number;
}
int main(){
int * ptr = getPtr();
int number;
number = *ptr;
cout <<"number = "<<number<<endl;
number = *ptr;
cout <<"number = "<<number<<endl;
return 0;
}
为什么两次number输出的值不同?怎么改?
回复列表 (共3个回复)
沙发
night_coffee [专家分:0] 发布于 2012-04-16 19:38:00
问题似乎与int * ptr = getPtr();这句有关系 , 去掉这个函数调用就没事了 ;
而且假如在主函数内部把这两句
number = *ptr;
cout <<"number = "<<number<<endl;多写几遍,除了第一遍等于3之外,后面的几遍输出为同一个值;再调试一遍,除了第一个输出为3之外,后面几个又是另外一个数;
继续再调试一遍,它又跟第一遍的结果一样了 !
去掉getPtr();后,在主函数内部实现这个的时候,就没有这个情况!
哎,学识浅薄,等待大侠中...
板凳
gangan_1990 [专家分:0] 发布于 2012-04-16 20:59:00
我稍微修改了程序,
#include <iostream>
using namespace std;
int * getPtr()
{
int number = 3;
return &number;
}
int main(){
int * ptr = getPtr();
int number;
number = *ptr;
cout <<"number = "<<number<<endl;
number = *ptr;
cout <<"number = "<<number<<endl;
ptr = getPtr();
number = *ptr;
cout <<"number = "<<number<<endl;
number = *ptr;
cout <<"number = "<<number<<endl;
return 0;
}
发现临时变量在函数调用后第一次使用是保留的,第二次使用就清掉了。可能是编译器的作用。不太确定。
3 楼
63955011 [专家分:0] 发布于 2012-04-23 11:35:00
因为 当第一次调用完getPtr函数之后,指针ptr指向整数3,然而整数3是函数的变量,它在栈中产生,一旦函数结束之后,系统自动消除,所以第二次ptr所指向的整数已经不是3了,是一个编译器规定的值
修改1
#include <iostream>
using namespace std;
int * getPtr(){
static int number = 3;
return &number;
}
int main(){
int * ptr = getPtr();
int number;
number = *ptr;
cout <<"number = "<<number<<endl;
number = *ptr;
cout <<"number = "<<number<<endl;
return 0;
}
加一个static变成静态变量,使函数结束时,值不消失
我来回复