【发布时间】:2013-04-23 16:40:33
【问题描述】:
考虑以下两行代码:
const char *ptr = "Hello";
char arr[] = "Hello";
对于指针定义,"Hello" 字符串字面量本质上是不可变,但ptr 变量本身可以改变并持有不同的地址。
对于数组定义,"Hello" 字符串文字被复制到数组的位置,但arr 不能指向不同的位置;但是,数组保存的字符串是可变的,因此可以更改。
现在考虑以下两行代码:
const char * const ptr = "Hello";
const char arr[] = "Hello";
这里,由于const char 限定符,两个字符串都是不可变的——不过更有趣的是:将ptr 定义为常量指针,它不能指向不同的地址。
这两行代码会导致相同的行为吗?如果最终效果相同,在实现上是否存在理论上的差异——例如,指针方法是否为匿名数组分配内存来保存指针本身之外的字符串,而数组方法只为一个数组?
【问题讨论】:
-
区别:1.数组不是指针,2.指针不是数组,3.
sizeof()
标签: c arrays pointers constants c99