|
网站首页
|
业界新闻
|
小组
|
威客
|
人才
|
下载频道
|
博客
|
代码贴
|
在线编程
|
编程论坛
|
登录
注册
短消息
我发表的主题
我参与的主题
我收藏的贴子
我上传的附件
我下过的附件
编辑个人资料
我的博客
用户控制面板
搜索
道具
恢复默认风格
碧海青天
秋意盎然
棕红预览
粉色回忆
蓝雅绿
紫色淡雅
青青河草
e点小镇
橘子红了
红红夜思
水晶紫色
雪花飘飘
新年快乐
风格
短消息
论坛展区
帮助
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 请赐教!!!
我的收件箱(0)
欢迎加入我们,一同切磋技术
用户名:
密 码:
共有
1160
人关注过本帖
标题:
请赐教!!!
只看楼主
加入收藏
预备大佬
等 级:
新手上路
帖 子:33
专家分:4
注 册:2018-11-8
结帖率:
81.82%
楼主
收藏
已结贴
√
问题点数:10 回复次数:3
请赐教!!!
#include<stdio.h>
int *gu()
{
int a[3] = {1,2,3};
int *pa = a;
return pa;
}
int *foo()
{
int b[3] = {4,5,6};
int *pb = b;
return pb;
}
int main()
{
int *pa = gu();
foo();
printf("pa[0] = %d\n",pa[0]);
return 0;
}
为什么传回来的值是4
搜索更多相关主题的帖子:
int
return
pb
main
printf
2018-12-21 17:16
举报帖子
使用道具
赠送鲜花
lxk1732942
等 级:
侠之大者
威 望:
7
帖 子:450
专家分:425
注 册:2018-9-4
第
2
楼
收藏
得分:3
我感觉:gu子函数中定义的数组a在返回主调函数main时被释放掉了,main函数又调用foo子函数,子函数中又定义了一个数组b,可能是系统分配给这两个数组的地址一样,之前的数据被覆盖了。
2018-12-21 17:45
举报帖子
使用道具
赠送鲜花
想飞的蛋
等 级:
新手上路
帖 子:5
专家分:1
注 册:2018-11-8
第
3
楼
收藏
得分:1
我感觉按照运行就是输出四啊,没什么毛病。
2018-12-21 19:15
举报帖子
使用道具
赠送鲜花
zbjzbj
来 自:郑州
等 级:
贵宾
威 望:
52
帖 子:633
专家分:3045
注 册:2011-4-22
第
4
楼
收藏
得分:6
二楼说的基本正确。a是子函数定义的,退出子函数时,a数组已经失效,但是指针pa没有失效,也没有释放。
当foo子函数,定义数组b的时候,因为数组a的空间已经空闲,系统把这个空间又分配给数组b了,b和a实际沿用了同一个地址。所以又改写成了456。最后打印的时候,pa指向的地址实际是456。但是,这时候如果打印a[0],程序是报错的,因为a已经无意义了。
编程时应避免出现这种情况,野指针。
2018-12-21 21:00
举报帖子
使用道具
赠送鲜花
4
1/1页
1
快速回复:
请赐教!!!
数据加载中...
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.035259 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved