求解下面的C语言问题,请解释一下

#include<stdio.h>int*fun(){inta[4],k;for(k=0;k<4;k++)a[k]=k;returna;}voidmain(){int*p... #include <stdio.h>
int *fun()
{
int a[4],k;
for(k=0;k<4;k++)a[k]=k;
return a;
}
void main()
{
int *p,j;
p=NULL;
p=fun();
for(j=0;j<4;j++){printf("%d\n",*p);p++;}
}
照理说读出来应该是0,1,2,3啊?怎么运行的是随机数哦?求解释
展开
 我来答
sssstar007
2012-10-03 · TA获得超过321个赞
知道小有建树答主
回答量:547
采纳率:0%
帮助的人:252万
展开全部
fun返回的是该函数内部栈空间地址,
当返回主函数main时,这块栈空间已经被释放,
所以输出为随机数:)
追问
但是fun函数不是把a地址返回了得嘛?返回了就应该返回给了Main函数再释放啊?要是都已经释放了那不是所有要返回值的函数都被释放而不能被返回拉?
追答
>但是fun函数不是把a地址返回了得嘛?
=>我们把地址比作钥匙,钥匙对应得数据为某个房间,
fun函数是把钥匙返回了,可是这个钥匙对应的房间被释放了,那么你放在这个房间里的数据就会丢下。
注释:数组a是fun函数的栈空间里的数据,fun函数的栈空间在fun函数调用结束时会被释放。
>返回了就应该返回给了Main函数再释放啊?
=>栈空间的释放规则是各个编译器约定好的,不是你我能决定的,如果是堆空间,程序员可以决定。

>要是都已经释放了那不是所有要返回值的函数都被释放而不能被返回拉?
=>返回值本身是可以返回的,没有任何问题,
关键是你这里这个返回值是一个地址,这个地址是完全正确的,
但是地址指向的子函数的栈空间里面的对应的值被释放了。
这个你明白?

有时间研究下,函数间的值传递,引用,和指针传递吧。
TableDI
2024-07-18 广告
VLOOKUP是Excel中用于垂直查找的函数,其基本用法包括四个参数:1. 查找值:即在数据表首列中需要搜索的值。2. 数据表:包含查找值的单元格区域或数组。3. 返回值所在列数:指定返回查询区域中第几列的值。4. 查找方式:选择精确匹配... 点击进入详情页
本回答由TableDI提供
帐号已注销
2012-10-03
知道答主
回答量:96
采纳率:0%
帮助的人:31.1万
展开全部
int *fun()
{
int a[4],k;
for(k=0;k<4;k++)a[k]=k;
return a; //函数内部定义的数组不能返回主函数,只能从主函数传数组名进去,然后再返回
} //函数调用完,里面变量会释放
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友c296525
2012-10-03 · TA获得超过591个赞
知道小有建树答主
回答量:210
采纳率:33%
帮助的人:59万
展开全部
LIHAI
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式