char *strA()
{
char str[] = "hello word";
return str;
}
上述程序有什么问题?
简单的来说,str是个局部变量的地址,作为返回值,有可能被提前回收。
那么局部变量可以作为函数的返回值吗,这个问题不能一概而论。局部变量作为返回值时,一般是系统先申请一个临时对象存储局部变量,也就是找个替代品,这样系统就可以回收局部变量,返回的只是个替代品。
了解完局部变量返回的过程,那么如果返回的是一个基本类型的变量,比如:
int a;
a = 5;
return a;
那么就会有一个临时对象也等于a的一个拷贝,即5返回,然后a就被销毁了。尽管a被销毁了,但它的副本5还是成功地返回了,所以这样做没有问题。
那么如果是指针,这么返回就问题很大,因为你返回的局部变量是地址,地址虽然返回了,但地址所指向的内存中的值已经被回收了,你主函数再去调,就有问题了。这个问题也是可以解决的,可以把局部变量变为静态变量或者全局变量,这样就不存放在栈中了,而是存放在静态存储区,不会被回收。
char str[] = "hello word";//分配一个局部变量
char *str= "hello word";//分配一个全局变量