您的位置:首页 > 其它

函数内返回字符数组和字符指针的问题

2015-10-15 14:59 288 查看
// 1

#include<stdio.h>

char *arrstr()

{

char arr[]="Hello World !";

return arr;

}

int main()

{

char *str=arrstr();

printf("%s",str);

}

// 2

#include<stdio.h>

char *arrstr()

{

char *p="Hello World !";

return p;

}

int main()

{

char *str=arrstr();

printf("%s",str);

}

结果: 1 输出为乱码 2 输出 Hello World!

1、"hello world!"是一个字符串常量,存放在静态数据区,没错,但是把一个字符串常量赋值给了一个局部变量(char
[]型数组),该局部变量存放在栈中,这样就有两块内容一样的内存,也就是说“
char p[]="hello
world!";
”这条语句让“hello
world!”这个字符串在内存中有两份拷贝,一份在动态分配的栈中,另一份在静态存储区。
当arrstr函数退出时,栈要清空,局部变量的内存也被清空了,所以这时的函数返回的是一个已被释放的内存地址,所以打印出来的是乱码。

2、把字符串所在静态存储区的首地址赋给指针p , 当函数退出时,字符串常量所占内存不会被收回,所以能够顺利访问访问
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: