求解下面的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啊?怎么运行的是随机数哦?求解释 展开
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啊?怎么运行的是随机数哦?求解释 展开
展开全部
fun返回的是该函数内部栈空间地址,
当返回主函数main时,这块栈空间已经被释放,
所以输出为随机数:)
当返回主函数main时,这块栈空间已经被释放,
所以输出为随机数:)
追问
但是fun函数不是把a地址返回了得嘛?返回了就应该返回给了Main函数再释放啊?要是都已经释放了那不是所有要返回值的函数都被释放而不能被返回拉?
追答
>但是fun函数不是把a地址返回了得嘛?
=>我们把地址比作钥匙,钥匙对应得数据为某个房间,
fun函数是把钥匙返回了,可是这个钥匙对应的房间被释放了,那么你放在这个房间里的数据就会丢下。
注释:数组a是fun函数的栈空间里的数据,fun函数的栈空间在fun函数调用结束时会被释放。
>返回了就应该返回给了Main函数再释放啊?
=>栈空间的释放规则是各个编译器约定好的,不是你我能决定的,如果是堆空间,程序员可以决定。
>要是都已经释放了那不是所有要返回值的函数都被释放而不能被返回拉?
=>返回值本身是可以返回的,没有任何问题,
关键是你这里这个返回值是一个地址,这个地址是完全正确的,
但是地址指向的子函数的栈空间里面的对应的值被释放了。
这个你明白?
有时间研究下,函数间的值传递,引用,和指针传递吧。
TableDI
2024-07-18 广告
2024-07-18 广告
VLOOKUP是Excel中用于垂直查找的函数,其基本用法包括四个参数:1. 查找值:即在数据表首列中需要搜索的值。2. 数据表:包含查找值的单元格区域或数组。3. 返回值所在列数:指定返回查询区域中第几列的值。4. 查找方式:选择精确匹配...
点击进入详情页
本回答由TableDI提供
展开全部
int *fun()
{
int a[4],k;
for(k=0;k<4;k++)a[k]=k;
return a; //函数内部定义的数组不能返回主函数,只能从主函数传数组名进去,然后再返回
} //函数调用完,里面变量会释放
{
int a[4],k;
for(k=0;k<4;k++)a[k]=k;
return a; //函数内部定义的数组不能返回主函数,只能从主函数传数组名进去,然后再返回
} //函数调用完,里面变量会释放
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
LIHAI
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询