注册 登录
编程论坛 C++教室

为什么函数的值变成静态的了?新手请教

mnb1237273 发布于 2014-06-26 16:43, 488 次点击
  小弟不才,刚刚学习到引用这里,int a; int &b=a;这个我知道是引用,以后操作b就等于操作a了,但是对于函数的引用小弟没懂,如有如下程序:

#include <iostream>   
using namespace std;  

int a = 4;  
//函数返回a的引用,即a的别名!!!!   
 
int &f(int x)  //这里f前加的那个“&”符号后函数到底发生了什么变化????
{  
   
   a = a + x;  
    return a;  
}  
  
int main()
{  
  
    int t = 5;   
      cout << f(t) << endl;//输出  9    (a=9)  t=5   
    f(t) = 20;//先调用,再赋值  a=20    t=5                 为什么这里能对函数赋值?
    cout << f(t) << endl;//输出25  (a=25)    t=5   
    t = f(t);//先调用,再赋值   a=30,t=30   为什么这里a=30?
   cout << f(t) << endl;//60                为什么这里a=60?  为什么每次执行后a的值保留了下来参与了下次的执行?不是要加static才是这样的么?
   
   return 0;  
}  

[ 本帖最后由 mnb1237273 于 2014-6-26 16:50 编辑 ]
3 回复
#2
Andy_xiaoyan2014-06-26 17:54
我同为菜鸟,发表自己的见解,有错误楼下请指出,我这是第一次给人回答,很胆怯啊。
既然f()函数的返回值是引用,并且return a,说明f()就是 a的别名,返回的就是a的引用
其实应该定义一个类似;int &b = f(t),这里 b就是对a的引用,给f(t) = 20 ,就相当于对a 赋值,

至于那里为什么是30 ,因为上面 a=25 ,t = 5,调用函数后当然是30,不然呢?
每调用一次 ,全局变量就改变了,和static 有什么关系
#3
rjsp2014-06-27 09:00
int &f(int x)  //这里f前加的那个“&”符号后函数到底发生了什么变化????
------ 不是f前加了个&,而是int后加了个&。int&是一体的,作为返回类型。

f(t) = 20;// 为什么这里能对函数赋值?
------ f(t)是函数吗?f才是函数。
#4
mnb12372732014-06-27 09:51
感谢楼上二位兄台 小弟明白了,谢谢。
1