首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

函数返回的局部变量为什么这样就正确?解决办法

2012-02-17 
函数返回的局部变量为什么这样就正确?#includestdio.hchar a(int x){char b[13]for(x0x10x++)b[x]

函数返回的局部变量为什么这样就正确?
#include<stdio.h>
char a(int x)
{
char b[13];
for(x=0;x<10;x++)
b[x]='a'+x;
return b[6];//为什么这里是b,函数类型是char * 型的就不行?两个不都是局部变量吗?不应该都是会错误吗?}
main()
{int c=4;
printf("%c",a(c));
getchar();}


[解决办法]

探讨

#include<stdio.h>
#include<malloc.h>
char * a(int x)
{
char * b;
b=(char *)malloc(10*sizeof(char));
b="abc";
return b;
}
main()
{int c=4;
printf("%s",a(c));
getchar();}
那为什么这样就可以呢?

[解决办法]
1。malloc函数返回一个指针,指向的内存在free前可认为有效。堆中对象不是局部对象(自动变量),不自动回收内存。2。字符串常量也不是局部对象,生命周期是到程序结束。3。测试只能证明错误,不能证明正确。所以你的例子不能说明问题,而且楼上指出错误了。4。不要看老谭们的书(应付考试除外)。看C primer

热点排行