从程序地址空间的角度来看,字符串定义中的以下符号之间有什么区别?
char str[20] = "Just to Ask";
char *str = "Just to Ask";
答案 0 :(得分:0)
char str[20] = "Just to Ask";
上述语句定义了str
个20
个字符的数组"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}}