在C++中,函数的返回值出来可以是普通的数据类型,还可以是指针类型,我们将函数的返回值定义为指针类,用来返回一个变量的地址,但我们不能返回局部变量的地址。
用指针作为函数返回值时,需要注意的一点是,函数运行结束后会销毁内部定义的所有局部数据,包括局部变量,局部数组,形参,函数返回的指针尽量不要指向这些数据。
语法如下:
type* funname()
{
return val;
}
我们定义了一个funname函数,其返回值为type类型的指针;
#includeusing namespace std; int*maxval(int*a, int*b) { if (*a > *b) { return a; } else { return b; } } int main() { int a = 4, b = 5; int *c=NULL; c = maxval(&a, &b); cout << "c的字面值:" << *c << endl; cout << "c地址:" << c << endl; }
试着返回局部变量,看看发生什么情况
#includeusing namespace std; int *arrSize() { int size = 100; return &size; } int main() { int *pSize = arrSize(); cout << "pSzie = " << *pSize << endl; return 0; }
我们在arrSize函数里面返回了局部变量size的地址,再次运行程序,貌似没有问题,现在我们修改程序如下:
这次,我们在打印之前增加了一个cout函数的调用,次数在运行该程序,我们可以看到这次输出了0,发生了错误,因此我们在程序中,坚决不要放局部变量的地址。



