函数返回值是指针的,不能返回函数内部的局部变量的地址,因为函数内部的局部变量在函数运行结束后生存期结束;
例如:
int* func()
{
int value;
return &value;//这样是错误的
}
以上value是局部变量,函数结束后,变量生存期结束,不能返回该变量地址。
有三种情况可以避免这种情况:
1、返回的是函数形参的地址
例如:
int* func(int value)
{
return &value;
}
2、返回的是函数形参,且形参是指针类型
int* func(int *value)
{
return value;
}
3、函数中局部变量声明为static类型
int* func()
{
static int value = 1;
return &value;
}
声明为static的话,value的生命周期为整个程序的生命周期,故可以返回其地址。
4、函数中局部变量是指针类型
char* func()
{
char* value = "hello world";
return value;
}