为了账号安全,请及时绑定邮箱和手机立即绑定

字符串常量的存储

字符串常量的存储

哈士奇WWW 2019-05-25 13:14:05
在网上看内存管理时看到人家说:chars1[]="aaaaaaaaaaaaaaa";char*s2="bbbbbbbbbbbbbbbbb";aaaaaaaaaaa是在运行时刻赋值的;而bbbbbbbbbbb是在编译时就确定的;有点不明白~“aaaaaaaaaaa”"bbbbbbbbbbbbbbbbb"应该都属于字面值常量,在编译时应该存储在数据区中的文字常量区吧,所以为什么说“aaaaaaaaaaa是在运行时刻赋值的;而bbbbbbbbbbb是在编译时就确定的;“请大神帮忙解释一下,谢谢!
查看完整描述

2 回答

?
动漫人物

TA贡献1815条经验 获得超10个赞

首先你要明确s1和s2的类型,前者是数组类型,后者是指针类型,完全不同!!!,但是可以转化。
chars1[]="aaaaaaaaaaaaaaa";这句代码在干嘛呢?你可以把它想象成inta=1;,都是定义并赋初始值。但是和char*s2="bbbbbbbbbbbbbbbbb";相比确实是比较模糊的,s1那句其实是在以字符串初始化字符数组,这句加粗的好好地理解!!!
解释到这里你应该就懂了。找不到啥讲的了。
还有chars1[]="aaaaaaaaaaaaaaa";是在运行时赋值的么?我怎么觉得是在编译期呢?以我的理解,如果该句放在全局作用域,是在编译期的,如果不是的话,就是运行期。不知道说的对不对,待指正!
                            
查看完整回答
反对 回复 2019-05-25
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

chars1[]="aaaaaaaaaaaaaaa";
上面的写法s1[]存储的数据存放于栈空间里,是程序运行时东西分配的。赋值“aaaaa......”的长短会影响栈使用,如果这样赋值太长的一个字符串比如超过1024byte在有的ide上编译不过。
char*s2="bbbbbbbbbbbbbbbbb";
上面的写法"bbbbbbbbbbbbbbbbb"不占用栈空间,这个“bbbbb...”(一般)存储于程序的常量区,由编译时确定
                            
查看完整回答
反对 回复 2019-05-25
  • 2 回答
  • 0 关注
  • 478 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号