帮忙写出输出结果

来源:百度知道 编辑:UC知道 时间:2024/05/10 12:28:11
#include<stdio.h>
int &f()
{
static int i=2;
return ++i;
int g()
}
int j=2;
return ++j;
)
void main()
{
int &ri=f();
int rj=g();
f();
rj=g();
printf("ri=%d,rj=%d",ri,rj);
}
最好写详细点,谢谢啦~

首先, 你的程序有问题, 正确的写法应该是:
#include<stdio.h>
int &f() //返回的是整型引用
{
static int i=2; //i是静态变量, 具有文件级作用域
return ++i; //第一次调用返回3, 以后每次加1.
}
int g() //直接返回整型
{
int j=2; //j是局部变量, 具有块作用域, 即该函数体内
return ++j; //每次调用都返回3.
}
void main()
{
int &ri=f(); //ri是整型引用, 它维系在函数f的返回值i上,=3
int rj=g(); //rj=3
f(); //i改变为4, ri也跟着改变为4
rj=g(); //rj=3, 被重新赋值
printf("ri=%d,rj=%d",ri,rj);
}
输出的结果是4和3, 引用一旦维系到一个目标上, 那么它就会跟随目标变化, 就像上面的ri一样, 随着i的变化而变化, 由于i是静态变量, 它的作用域是文件级的, 而且静态变量具有记忆效应, 它会在前一次改变的基础上继续改变, 就像主函数的的三行调用f()一样, i由3变为4, 而ri作为引用已经维系在i上, 所以ri也跟着变为4, 即使没有显示赋值操作.