下面在贴出一段代码:注意了,问题来了!


#include <iostream>

using namespace std;

int *fun()
{
 int temp = 10;

 //cout<<&temp<<endl;

  return &temp;
}

int main()
{
 int *s;
 s = fun();

 cout<<s<<endl;
}
 


  你运行上面的代码,我在visual studio 2008上运行,是没有任何error的!但是有一个warning!

  warning C4172:返回局部变量或临时变量的地址

  为什么?

  temp是函数运行时建立的临时变量,fun函数运行结束时,系统释放temp,函数返回它的地址是没有任何意义的!

  同时,我再贴出下列一段代码:


#include <iostream>

using namespace std;

int &fun()
{
 int temp = 10;

 //cout<<&temp<<endl;

  return temp;
}

int main()
{
 int s;
 s = fun();

 cout<<s<<endl;
}
 


  这个也有警告的,warning C4172:返回局部变量或临时变量的地址

  同理,函数返回需要依托一个对象,显然,被依托的对象不能是函数体内定义的临时变量,原因与返回指针函数一样!被调用函数内定义的局部是临时变量,函数返回时将被释放!

  至于为什么返回值ok了?那是系统提供的一个变量来保存函数体内的临时变量的返回值!

  所以,这种问题,在公司应聘时,考官可能会出题的!现在,博文写到此处为止!如有写的不妥之处,请提出,望一起讨论!