一段代码:
#include <stdio.h>
int main(){
char cards[] = "JQK"; //editable, copy is in stack
// if char *cards is ineditable, in constant segment
char a_card = cards[2];
cards[2]=cards[1];
cards[1]=cards[0];
cards[0]=cards[2];
cards[2]=cards[1];
cards[1]=a_card;
puts(cards);
return 0;
}
在使用字符串字面值直接给 char * 类型的变量赋值后,字符串的内容是不可以修改的,这部分的内容在程序初始化时存放在了常量部分。为了提醒自己不可修改,可以加 const 修饰符,这是编译器会报错。
而直接声明为 char 数组类型的变量可以修改。在程序初始化时,字符串会保存在常量区,并且为了给数组分配空间栈区会有另一份拷贝,这部分是可以修改的。