| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 269 人关注过本帖
标题:关于函数返回值与指针为题。。一点自己点看法。。勿喷
只看楼主 加入收藏
C_596322153
Rank: 6Rank: 6
来 自:徽州
等 级:侠之大者
帖 子:182
专家分:466
注 册:2012-1-10
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:1 
关于函数返回值与指针为题。。一点自己点看法。。勿喷
如下代码:
一、
char *Func()
{
    char ar[] = {"hello"};
    return ar;
}
int main()
{
    printf("%s",ar)
    return 0;
}
/***********************************
报错:局部变量地址不可作为返回值,
************************************/
二、
char *Func()
{
    char *ar = "hello";
    return ar;
}
int main()
{
    printf("%s",ar);
    return 0;
}
/**********************************/
今天在书上看到的跟不懂得分享下,
一、局部变量存在 栈里 生存期 定义到 函数的结束 所以 return 其地址 很显然 得不到

二、虽然 在函数内定义指针ar但是将其初始化为 "hello" 字符串常量 (字符串常量存在数据区只读存储区)所以能得到返回地址

说的不清楚 那位知道的可以 详细介绍下 内存存储的问题:先谢谢了
搜索更多相关主题的帖子: hello return 
2012-11-25 14:27
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:20 
就看你需要的地址能否在运行过程中保持不变
 char ar[] = {"hello"};
这里的数组ar是临时开辟的,因此函数返回后,整个空间都没了,所以你即使拿到了原来的首地址,也访问不到数据了
 char *ar = "hello";
虽然ar本身是临时开辟的,但是后面的字符串存储在RO段,因此是个固定地址,所以每次ar都能获取到hello的首地址,这样就能在main函数中访问到

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2012-11-25 15:54
快速回复:关于函数返回值与指针为题。。一点自己点看法。。勿喷
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.039532 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved