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