1
qiuyi116 2018-07-04 19:29:10 +08:00 via iPhone
不是字符串常量,就是二维数组。定义在函数内外,所在区域不同。
|
2
lingdux 2018-07-04 23:20:59 +08:00
define 出来的才是常量。你这个是变量,怎么可能存再常量区。
这个存储有两种可能,取决于你写在什么地方。 一种是全局变量,存在全局变量和静态变量的存储区域。 另一种是局部变量,存储在栈中。 这个问题跟踪一下汇编代码看一下内存一目了然。 |
3
onemoo 2018-07-05 00:58:02 +08:00 1
> "111111", "3333", "2222" 是常量区的字符串常量吗?
你指的是等号右侧大括号中的这三个的话,那么是的。这样写出来的字符串字面量是不可更改的,可能会放在只读数据区。 > 数组 buf2 中 存储的是 常量区的地址还是 字符? 当初始化数组时,等号右侧的大括号中的每一项被用来初始化数组的相应元素。 这里 buf2 数组的元素还是数组,所以(前三个)数组元素是由字符串字面量("111111", "3333", "2222")来初始化的。 用字符串字面量初始化 char 数组时,数组中直接保存这些字符。所以 buf2[0] 中就直接存储了 "111111" 这几个字符。 那么,buf2 中保存的是这些字符,不是地址。 如果代码是 const char *buf2[10] = { "111111", "3333", "2222" },buf2 的元素是 const char 指针类型,其中保存的自然就是这三个字符串常量的地址了。 |