对字符串常量的讨论

a:请问一下在c中 数字常量会不会和字符串常量一样 先放到常量区再赋给变量

b:我觉得数字常量没在常量区也没在内存中。因为对字符串取地址是合法表达式,比如说&(“hello”)是合法的,然而对常数取地址就会报错比如说&(3)

a:也是 谢了
a:话说为什么要弄出一个常量区来存字符串

c:我也不知道,可能是方便编译器实现吧。我看过一本书,里面说,c语言不是为了方便程序员的,而是为了方便编译器设计者的。

b:刚才上计算机组成原理课,讲到了指令系统,我又想起了那个问题。好像知道为什么了,因为常数或者字符可以直接当立即数写到指令里,所以不用再有单独的存储区。整个字符串写不到指令里,只能把字符串的始址写指令里,所以字符串常量要用单独的存储区。

a:原来是这样 谢谢你了。 最近学了学汇编感觉对底层的东西也有了一些了解



e:在这里插入图片描述
e:请问这两种初始化方法,是不是只是变量存放地址不一样而已?

f:第一种直接从字符串常量区引用对应。第二种会在堆中创建一个新对象,然后引用这个对象。
ps:本人觉得两种方法得到的字符串地址一样。

posted @ 2022-04-19 18:17  enbug  阅读(24)  评论(0编辑  收藏  举报