#include <iostream>
using namespace std;
char *str1()
{
char *str="hello world";
return str;
}
char *str2()
{
char str[]="hello world"; //str[]在栈上,子函数结束后自动释放内存,返回的其实是首地址
return str; //拷贝后,返回和”hello world“无关,返回存在str[]中的内容
}
char *str3()
{
static char str[]="hello world";
return str;
}
int main()
{
char *str=NULL;
str=str1();
cout<<"指针指向内存内容:"<<str<<endl; //输出hello world
str=str2();
cout<<"栈内容:"<<str<<endl; //输出乱码
str=str3();
cout<<"静态存储区内容:"<<str<<endl; //输出hello world
return 0;
}
字符串常量存放在静态存储区
str1返回指针指向内存首地址,由于字符串常量存在静态区,所以内容不变,还是“hello world”
str2将静态存储区的内容拷贝一份到栈中,由于栈在str2结束时释放栈内存,所以输出为乱码
str3返回存在静态存储区的内容,“hello world”
可以返回一个局部变量的值,也可以返回一个局部静态指针的地址,但不应该返回一个局部自动指针的地址
int get()
{
int a=152;
return a; //可以正确返回
}
int *get()
{
int a=152;
return & a; //无意义
}