考虑以下两行代码:
const char *ptr = "Hello";
char arr[] = "Hello";
对于指针的定义,
"Hello"
字符串字面量基本上是不可变的,但 ptr
变量本身可以改变并保存不同的地址。对于数组的定义,
"Hello"
字符串字面量被 复制 到数组的位置,但是 arr
不能 指向另一个位置;但是,数组所持有的字符串是可变的,因此可以更改。现在考虑以下两行代码:
const char * const ptr = "Hello";
const char arr[] = "Hello";
在这里,由于“const char”限定符的影响,两个字符串都是不可变的——更有趣的是:如果将“ptr”定义为常量指针,则它不能指向不同的地址。
这两行代码会产生相同的行为吗?如果最终效果相同,那么在实现上是否存在理论上的差异——例如,指针方法是否会分配内存来容纳匿名数组以保存字符串,而数组方法仅仅分配内存用于数组本身?
sizeof()
。 - user529758