C语言知识---指针型函数的返回值可以用数组名吗???

代码1:编译不通过----Pointer to local 'aa' is an illegal return value.
char *study(void);
char *study(void)
{
char aa[20] = "I Want go home";
return aa;
}

代码2:可以执行成功!!
char *study(void);
char *study(void)
{
char *aa = (char *)malloc(30*sizeof(char));
strcpy(aa, "I Want go home");
return aa;
}

疑问:
请问各大侠,虽然我深知道指针与地址还是不一样的,指针型函数的返回值本身是返因一个指针,指针是地址,数组名也是地址,请帮忙确认:

难道真的不可以使用数组名来返回吗?

按照C的规则,以上二者在语法和逻辑上都是正确的。例1之所以有问题,是“不可以返回局部数组的首地址”,因为局部数组是建在栈上的,在函数结束后就自动消失了,通过返回的地址操作这一失控的区域,将会产生不可预料的结果;几乎所有的教科书上都有这方面的提醒。过去的编译器对例1的问题是不提示的,你的编译器如果不能通过编译,说明它比较“现代”。例2之所以可行,是因为动态创建的空间在堆上,函数结束后是不消失的,要人工用释放语句才能解除控制。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-02-10
我必须要说的是数组名不是指针,所以不能返回是合理的。你尝试一下类型转换
相似回答