C中不同类型的字符串声明

时间:2014-04-19 08:17:09

标签: c arrays string

从程序地址空间的角度来看,字符串定义中的以下符号之间有什么区别?

char str[20] = "Just to Ask";

char *str = "Just to Ask";

1 个答案:

答案 0 :(得分:0)

char str[20] = "Just to Ask";

上述语句定义了str20个字符的数组"Just to Ask",并使用字符串文字char str[20] = {'J', 'u', 's', 't', ' ', 't', 'o', ' ', 'A', 's', 'k', '\0'}; 初始化数组。以上陈述相当于

12

数组初始值设定项列表只有8个元素。数组str的其余0元素已初始化为char *str = "Just to Ask"; 。如果阵列具有自动存储分配,则在堆栈上分配。如果它具有静态存储分配,则将其分配在程序存储空间的数据部分中。

以下声明

str

定义"Just to Ask"不是数组,而是指向字符串文字const char *str = "Just to Ask"; // string literal is read-only 的指针。字符串文字是只读的,尝试修改它是未定义的行为。因此,您的问题中陈述的两个陈述完全不同,第二个陈述最好写成

{{1}}