免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: Mr_Yao
打印 上一主题 下一主题

[C] 请教下高手,char *str为什么会默认为 const char *str? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2011-01-11 12:14 |只看该作者
char *p = "abc";

定义了一个指向字符的指针p,它被初始化为指向一个字符数组(匿名的,不知道在哪儿), ...
donotblock 发表于 2011-01-11 11:38



    明白了,应该当时为了设计实现方便些吧,就 char *str;char str[]用了这两种方式...

论坛徽章:
0
12 [报告]
发表于 2011-01-11 12:16 |只看该作者
有一篇文章是关于说C语言的变量存放的区域,好像是分为5个区,

栈区--由编译器自动分配,程序员不可以更 ...
scgywx 发表于 2011-01-11 11:34



    你的意思就是说,如果定义 char str[] = "aaaa"; 这个应该放在堆区是把?

论坛徽章:
0
13 [报告]
发表于 2011-01-11 12:22 |只看该作者
回复 12# Mr_Yao


char str[] = "aaa";这个放在栈中,他所占用的内存大小由编译器来确定,他占用的内存大小是不可以改变的,但是值是可以改变的。
比如现在你要str[5] = 'a';这个时候就会出错了。

malloc分配的内存放在堆中。你可以随时随地改变他的内存大小和值。

论坛徽章:
0
14 [报告]
发表于 2011-01-11 12:23 |只看该作者
本帖最后由 donotblock 于 2011-01-11 12:24 编辑
你的意思就是说,如果定义 char str[] = "aaaa"; 这个应该放在堆区是把?
Mr_Yao 发表于 2011-01-11 12:16



    NO。 局部变量一般是在栈,用malloc分配是在堆。全局变量即不是堆也不是栈,初始化过的在data段,未初始化的在bss段。(惯例,非绝对) 想深入, 推荐《程序员的自我修养》

论坛徽章:
0
15 [报告]
发表于 2011-01-11 12:30 |只看该作者
好,明白不少。谢谢大家的帮助!

论坛徽章:
0
16 [报告]
发表于 2011-01-11 12:52 |只看该作者
因为你该的就是常量字符串

论坛徽章:
0
17 [报告]
发表于 2011-01-11 12:56 |只看该作者
找本讲程序内存布局的书看看。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP