c++简单程序一个

来源:百度知道 编辑:UC知道 时间:2024/06/16 16:11:00
#include<stdio.h>
int &f(){int i=10;int &j=i;return j;}
int g(){int j=20;return j;}
void main()
{
int &ri=f();
int rj=g();
printf("ri=%d\trj=%d\n",ri,rj,1,2,3,4,5,6,7,8);//问题行
int &gi=f();
int gj=g();
printf("gi=%d\tgj=%d\n",gi,gj);
}
在问题行中,本来ri个值是不确定的,但是,实际输出的时候,却输出6,把8去掉就输出5,(总是输出倒数第三个)去掉跟过也一样,请问这是巧合还是因为什么?

函数执行时,分配了栈空间,然后在空间赋值,返回时,栈空间收回,但内容并没有变,这时你又一次调用一个函数,结果就在原来的“废墟”上又分配空间,然后按顺序取值的话,正好取的值就是原来的空间上的内容,所以。。。

你那个逗号打错了吧 怎么会编译成功的?右边参数列表应该是从右至左压栈的,出栈就会正常顺序输出 后面的几个数字应该没什么问题 到底怎么回事?我也不知道?你重起计算机看看有没有变化 或者多运行点应用程序后关掉 看是否有变化 如果都是一样的 那就是你机子的内存管理机制问题了 涉及到操作系统内存管理,具体的 我也就不知道了

ri的值是由函数f()决定的,返回的是局部变量i的引用。 至于为什么是倒数的第三个数,那跟函数运行内部内存分配有关。比如堆栈等。