两种返回值的差别
#include <iostream>
using namespace std;
char *func()
{
char *p = "abc";
char arr[] = "1234567890";
//return p;
return arr;
}
int main()
{
char *ptr = NULL;
ptr = func();
cout << ptr << endl;
return 0;
}
1.返回p时,可以打印出 abc;
2.返回arr时,打印未知内容。
因为“abc”这个字符串常量放在静态存储区的(字符串常量很少需要修改,放在静态存储区可以提高效率),函数返回时不会释放这块内存,所以会把地址传给ptr,最终输出字符串。
而数组是在栈上开辟的内存,里面内容是从静态存储区字符串拷贝过来的,函数返回时释放了栈的内存,所以返回值指向一块未知内存(产生了野指针),输出的值是不可预知的。