免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2182 | 回复: 9
打印 上一主题 下一主题

langue 置顶的帖子呢? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-02-15 01:14 |只看该作者 |倒序浏览
有个帖子记得好像是langue置顶的吧。就是罗列了一些C/C++常见问题,和一些技巧的。怎么没有了?


我有个问题,记得好像原来那个帖子里面有类似的问题,想看看找不到了。问题如下:



  1. #include<stdio.h>
  2. char * test(){
  3. char * st= "abcdefg";
  4. return  st;
  5. }


  6. char* Test(){
  7.    char  st[] = "abcdefg";
  8.    return st;
  9. }

  10. int main()
  11. {
  12.    printf("%s\n" , test());
  13.    printf("%s\n" , Test());


  14. }

复制代码


运行结果为:
abcdefg
餏緒



后面一项为乱码。我的理解是因为那是局部变量,所以函数结束后,相应内存空间被收回了。
原先的内存空间被覆盖了,所以输出乱码。但是不明白,为什么第一个test()返回值却保留下来了?

记得langue置顶的帖子里面有差不多的提问。可惜现在没有了。

最近在看《C专家编程》问题很多。。。。。看了一下目录,似乎C程序运行时候内存的具体分配情况要到第七章才讲。现在我才看到第二章。对C程序具体运行时候内存分配情况毫无了解。

[ 本帖最后由 janusle 于 2007-2-15 01:30 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-02-15 01:33 |只看该作者
晕,langue是不是在线啊?帖子挂上去了

论坛徽章:
0
3 [报告]
发表于 2007-02-15 01:35 |只看该作者
谢谢提出。操作失误,置顶恢复。

论坛徽章:
0
4 [报告]
发表于 2007-02-15 01:39 |只看该作者
--

提示:

test() 中 st 为指针
Test() 中 st 为数组

--

论坛徽章:
0
5 [报告]
发表于 2007-02-15 01:39 |只看该作者
好的,谢谢

招聘 : c/c++研发
论坛徽章:
0
6 [报告]
发表于 2007-03-08 00:13 |只看该作者
原帖由 janusle 于 2007-2-15 01:14 发表
有个帖子记得好像是langue置顶的吧。就是罗列了一些C/C++常见问题,和一些技巧的。怎么没有了?


我有个问题,记得好像原来那个帖子里面有类似的问题,想看看找不到了。问题如下:


[code]
#include< ...

char * test(){
char * st= "abcdefg";
return  st;
}
这里面的"abcdefg"存放在代码区,是只读的,在程序生命周期都会存在

char* Test(){
   char  st[] = "abcdefg";
   return st;
}

这里的abcdefg存放在栈中,在函数Test退出时就消除了

论坛徽章:
0
7 [报告]
发表于 2007-03-08 13:35 |只看该作者
原帖由 jerryhua 于 2007-3-8 00:13 发表

char * test(){
char * st= "abcdefg";
return  st;
}
这里面的"abcdefg"存放在代码区,是只读的,在程序生命周期都会存在

char* Test(){
   char  st[] = "abcdefg";
   ...


问题的关键在于函数的返回值是指针。test函数中返回的是"abcdefg"的地址,因为是常量,这个地址指向的内容不会被改写,因此函数返回后同样会得到abcdefg
Test返回的是函数局部变量st,这个指针指向的内存当函数返回后就无效了,内容不确定。

论坛徽章:
0
8 [报告]
发表于 2007-03-27 16:39 |只看该作者
实际到底是因为数据被释放了   还是返回的指针失效?

论坛徽章:
0
9 [报告]
发表于 2007-03-27 17:12 |只看该作者
太老的话题了,详情见C专家编程
回楼上的,是栈数据释放了,返回的指针应该还是原来的是数值,自己printf一下就知道了

[ 本帖最后由 epegasus 于 2007-3-27 17:16 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2007-03-27 18:19 |只看该作者
嘿嘿,这个问题早就结贴了,我问的时候还没有看完C专家编程。后来看完了,答案自然就明晓了。
不管怎么样,还是谢谢诸位。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP