字符串存储方式以和静态存储区域、栈、堆.pdfVIP

字符串存储方式以和静态存储区域、栈、堆.pdf

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
字符串存储方式以和静态存储区域、栈、堆

字符串的存储方式以及静态存储区域、栈、堆 2010-10-10 10:51 488 人阅读评论(4) 收藏举报 下面两篇文章分析得比较详细.转自 /yangdelong/archive/2010/04/03/5447362.aspx 文章来源/shiwei0124/archive/2009/11/26/4877546.aspx 字符串的存储方式以及静态存储区域、栈、堆 在编程的时候偶尔会遇到一个字符串的问题,好像是这样说:不能把 const char* 转换成 TCHAR * ,只是这个错误有时候有,有时候没有,也没有深入关注过,只知道 abc 应该 是一个const 型的。 今天偶然看到2 个帖子,终于对这个问题有了比较清晰的理解 贴一: /u17/900b3797-3642-4569-a623-dc0f8ebd8401.html?see d=1325371970 #include stdio.h int A() { int test=10; return test; } int main() { int a=A(); printf(%d/n,a); return 0; } 上面的代码能编译通过 我想问 在A() 函数中的 test 变量的生存期不是只在A()函数体内 吗? 怎么还能成功返回呢 下面的这段代码为何就不行呢 两个程序中的变量生存期有什么区别啊? #include stdio.h char* A() { char p[]=hello world; return p; } int main() { char *str=NULL; str=A(); printf(%s,str); } 比较好的答案是: 一: 关键在这里: int a=A(); 实际是a=test;之后test 挂掉了,我们不管,反正有a. 而 str=A(); 就是str=p. 之后p 跟p 指向的堆区都挂了,可是str 依然孤独地指向p 那片挂掉的堆区. 明白了不? 二: 注意 int A() { int test=10; return test; } 返回的是值, 的确调用完后test 会释放, 但它的值被返回了 而 char* A() { char p[]=hello world; return p; } 返回的是指针, 确切讲是指针的值, 但因为hello world会释放, 所以返回的这个指针值没 用了 (存放字符串的空间被释放掉了, 这个指针值还有什么用?) 然后在看第二帖: /u10/8e6dfe37-b12f-410f-9e02-83eaad1c30a0.html?2569 2 问题: 先看贴 /u17/900b3797-3642-4569-a623-dc0f8ebd8401.html?see d=1325371970 这个帖子里面斑竹回答的内容,感觉很深刻。正确。但是实验一下时候出现点问题 C/C++ code char *FuncC() { char* a=hello word; return a; } char *FuncB() { char a[]=hello word; return a; } int _tmain(int argc, _TCHAR* argv[]) { char *b,*c; c = FuncC(); b = FuncB(); char a[100]; ::memset(a,NULL,100); strcpy(a,c); std::coutA=a B=b C =cendl; getchar(); return 0; } 输出结果: C/C++ code A=hello word B=p_/*(操作未知)*/ C=hello word;//我也认为C 结果也是未定义的,但是不管 怎么操作,结果都对啊 唯一不同的是 FuncB 中,返回的是局部指针数组的头指针,FuncC 中返回的是局部指针的 副本。他们都在编译时候确定大小,分

文档评论(0)

bokegood + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档