C语言 结构体 函数调用问题

把问题简化如下:#include<stdio.h>typedefstruct{inta;}list;list*creat(){listLi,*l;l=&... 把问题简化如下:#include <stdio.h>typedef struct { int a;}list;list * creat(){ list Li,*l; l=&Li; l->a=8; return l;}void print(list *l){ printf("%d",l->a);}void main(){ list *l=creat(); print(l);} 为什么 输出a的值不是8呢? 展开
 我来答
wanfustudio
2012-04-21 · TA获得超过1万个赞
知道大有可为答主
回答量:5513
采纳率:100%
帮助的人:3753万
展开全部
很简单,因为你的List Li, 这个是局部变量,它的内存是creat返回之后就被释放了,所以应该是一个不确定的值
改法:
可将List Li 搬到函数外面,做一个全局变量使用,也可以在main函数中定义,通过参数传入creat
list Li;
list * creat()
{
list*l;
l=&Li;
l->a=8;
return l;
}
延赫鄞银
2019-07-25 · TA获得超过3万个赞
知道大有可为答主
回答量:9921
采纳率:35%
帮助的人:1001万
展开全部
//问题出在下边这个函数上。
list
*
creat()
{
list
Li,*l;
//LI是局部变量,退出后会消失。所以
l=&Li这样是不稳定的。会引起系统崩溃。
l=&Li;
l->a=8;
return
l;
}
改为如下:
list
*
creat()
{
list
*l;
l=new
list;
l->a=8;
return
l;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
幸朗丽隋荣
2019-07-09 · TA获得超过2.9万个赞
知道大有可为答主
回答量:1.1万
采纳率:30%
帮助的人:707万
展开全部
你creat函数里的Li是局部动态变量
执行完这个函数之后
Li所占的内存被释放了
你把它的地址赋给i是没有意义的
任意值都可能出现
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式