在网上看内存管理时看到人家说: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";是在运行时赋值的么?我怎么觉得是在编译期呢?以我的理解,如果该句放在全局作用域,是在编译期的,如果不是的话,就是运行期。不知道说的对不对,待指正!
叮当猫咪
TA贡献1776条经验 获得超12个赞
chars1[]="aaaaaaaaaaaaaaa";上面的写法s1[]存储的数据存放于栈空间里,是程序运行时东西分配的。赋值“aaaaa......”的长短会影响栈使用,如果这样赋值太长的一个字符串比如超过1024byte在有的ide上编译不过。char*s2="bbbbbbbbbbbbbbbbb";上面的写法"bbbbbbbbbbbbbbbbb"不占用栈空间,这个“bbbbb...”(一般)存储于程序的常量区,由编译时确定
添加回答
举报
0/150
提交
取消
