社区
C语言
帖子详情
一个简单问题:函数返回指针
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
打赏
收藏
一个简单问题:函数返回指针
有两个函数: int *f1() { int a=34,*p; p=&a; return p; } char *f2() { char a[]="abcdef",*p; p=a; return p; } 理论上说,两个都返回指向局部变量的指针,函数运行结束后内存回收,都应变为“野指针”,但f1()却能正常运行,结果正确,f2()结果不对,不知是怎么原因,请高手帮帮忙!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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()结果不对
===========================
你是怎么处理返回值的?
《C经典面试》编译链接、
指针
、内存bug、
函数
、其它
指针
:
指针
概念、数组相关的
指针
、字符串
指针
、
函数
指针
等 3.内存bug:内存越位、内存覆盖、使用非法内存、内存泄露等。 4.
函数
:自定义
函数
、内联
函数
、回调
函数
、变参
函数
、递归
函数
、库
函数
等 5.其它:自动类型...
C++基础:
函数
指针
&
返回
函数
指针
的
函数
函数
指针
&...我们声明
一个
函数
,和
一个
指向该
函数
类型的
指针
,让
指针
指向该
函数
并通过
指针
调用它。 #include<iostream> using namespace std; //定义
一个
返回
值为int、参数表为(cha...
指针
函数
和
函数
指针
概述
指针
函数
和
函数
指针
是C语言里两个比较绕的概念。但是不仅面试题爱考,实际应用中也比较广泛。很多人因为搞不清这两个概念,干脆就避而远之,我刚接触C语言的时候对...
指针
函数
: 顾名思义,它的本质是
一个
函数
...
返回
指针
的
函数
&&指向
函数
的
指针
接下来我只讲
指针
的最常见用法,比如这一章的内容----
返回
指针
的
函数
与 指向
函数
的
指针
一、
返回
指针
的
函数
指针
也是C语言中的一种数据类型,因此
一个
函数
的
返回
值肯定可以是
指针
类型的。
返回
...
函数
指针
和
指针
函数
用法和区别
函数
指针
和
指针
函数
,在学习 C 语言的时候遇到这两个东西简直头疼,当然还有更头疼的,比如什么
函数
指针
函数
、
指针
函数
指针
、数组
指针
、
指针
数组、
函数
指针
数组等等,描述越长其定义就越复杂,当然理解起来就越难,...
C语言
69,373
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章