关于变量地址分配有关问题

关于变量地址分配问题

#include <iostream>
using namespace std;
int display1(int a=1){//返回整型值
int *q=&a;
cout<<"a的值是"<<a<<endl;
cout<<"变量*q的地址是q="<<q<<endl;
return *q;
}
int* display2(int a=2){//返回整型值
int *q=&a;
cout<<"a的值是"<<a<<endl;
cout<<"变量*q的地址是q="<<q<<endl;
return q;
}
int*& display3(int a=3){//返回整型值
int *q=&a;
cout<<"a的值是"<<a<<endl;
cout<<"变量*q的地址是q="<<q<<endl;
return q;
}
int main(){

  display1(1);
int *p;
p=display2(2);
//cout<<"int *display2(int a=0)返回的是地址"<<endl;
p=display3(3);
return 0;
}


输出为

a的值是1
变量*q的地址是q=0012FF2C
a的值是2
变量*q的地址是q=0012FF2C
a的值是3
变量*q的地址是q=0012FF2C
Press any key to continue

为何三次输出的地址相同。是否可以理解为函数调用完毕之后,所有变量空间被释放,又进行了空间重分配?

------解决方案--------------------
帮顶,我也是刚学,不太懂。
int*& display3(int a=3){//返回整型值
可以这样返回吗?
------解决方案--------------------
应该是可重用临时的空间,你可以看看反汇编的代码,函数的第一个参数的地址都是一样的
------解决方案--------------------
看到了 就解释下吧 程序初始化的时候 除了静态数据可常量 其他数据会 放到栈上面 每个函数都有自己的栈 首先是住函数的数据压在栈底 然后是你的 display1 中的元素压在栈中 当你display 调用结束他的数据也会出栈 然后运行display2 的时候 又把display3 压栈 后面的步骤都一样 楼主可以在三个函数中定义不同的变量个数来 验证·· 另为建议楼主看下编译原理
------解决方案--------------------
看下这三个函数上下的汇编就知道了display1(1);display1(2);display1(3);

------解决方案--------------------
巧合而已,没有意义。
反汇编一下看看汇编代码就是了
------解决方案--------------------
你这个和:
int a = 1;
display(&a);
a = 2;
display(&a);
a = 3;
display(&a);
这样的写法类似。地址都没有改变,但地址中的内容改变了,就像酒店的房间门号没变,但住在里面的人经常在改变。