考虑以下两行代码:
const char *ptr = "Hello";
char arr[] = "Hello";
对于指针定义,"Hello"
字符串字面量本质上是不可变的,但ptr
变量本身可以改变并持有不同的地址。
对于数组定义,"Hello"
字符串文字被复制到数组的位置,但arr
不能指向不同的位置;但是,数组保存的字符串是可变的,因此可以更改。
现在考虑以下两行代码:
const char * const ptr = "Hello";
const char arr[] = "Hello";
在这里,由于限定符,两个字符串都是不可变的——不过更有趣的是:定义为常量指针,它不能指向不同的地址。const char
ptr
这两行代码会导致相同的行为吗?如果最终效果相同,那么在实现上是否存在理论上的差异——例如,指针方法是否为匿名数组分配内存来保存指针本身之外的字符串,而数组方法只为一个大批?