一个简单问题:函数返回指针

skywgs 2005-03-14 02:13:36
有两个函数:
int *f1()
{
int a=34,*p;
p=&a;
return p;
}

char *f2()
{
char a[]="abcdef",*p;
p=a;
return p;
}

理论上说,两个都返回指向局部变量的指针,函数运行结束后内存回收,都应变为“野指针”,但f1()却能正常运行,结果正确,f2()结果不对,不知是怎么原因,请高手帮帮忙!
...全文
118 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhousqy 2005-03-14
  • 打赏
  • 举报
回复
但f1()却能正常运行,结果正确
===============
碰巧吧。是八對的。
skywgs 2005-03-14
  • 打赏
  • 举报
回复
kobefly的回答比较合理的,我试了以下代码:

main()
{
int *p,*pp;
char *cp;
p=f1();
cp=f2();

pp=malloc(sizeof(int));/*加这行后两个结果都不对*/

printf("%d,%s",*p,cp);

}
skywgs 2005-03-14
  • 打赏
  • 举报
回复
就是呀,当返回int *时是对的,返回char *时是乱码,测试程序是
main()
{
int *p;
char *cp;
p=f1();
cp=f2();

printf("%d,%s",*p,cp);

------------------------------------------

输出结果是34,乱码

int的C里很特别呀,比如定义函数时,如果函数体在main()后面,就得在main()前进行函数说明,而返回值为int 的函数却可以直接定义在main()之后,且不用在main()前说明,如下:

main()
{
if();/*可以*/
cf();/*出错*/
........
}

int if()
{
.....
}

char cf()
{
.....
}
}
kobefly 2005-03-14
  • 打赏
  • 举报
回复
fooooot(起床喽) ( ) 信誉:100 2005-03-14 14:20:00 得分: 0


char a[]="abcdef"字符串文字量是静态分配的


呵呵
人家说是这个错了,没有得到预期的结果,你这么说,这个正确拉

这个是数组,不是
char* a="abcdef"
fooooot 2005-03-14
  • 打赏
  • 举报
回复
char a[]="abcdef"字符串文字量是静态分配的
kobefly 2005-03-14
  • 打赏
  • 举报
回复
这个帖子
上去出现过
我回答的时候,就说不存在拉,晕~~~~·

其实这个问题,本来没有什么意义
既然你返回局部变量的地址,而局部变量在函数结束后,是要销毁的,所以返回
什么结果都是可能的,当然有可能正确,也有可能错误啊!

函数作用域结束后,会退栈,但你函数内变量的原地址被什么东西给覆盖了
或者没有人,没有变量去动这块内存,这都是可能的啊

所以,如果你用局部变量的地址去调这个值,如果还没有别的动作施加于这个地址,你就读到了正确
(你预料)的值,否则
就是你不认识的乱七八糟。

这个依赖于具体的编译器,系统的操作方式吧
languagec 2005-03-14
  • 打赏
  • 举报
回复
dongpy 2005-03-14
  • 打赏
  • 举报
回复
f1()却能正常运行,结果正确,f2()结果不对
===========================
你是怎么处理返回值的?

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧