C编程语言中,字符串被认为是一个常量。
因此,当我声明char *s = "Hello"
时,我知道s
指向内存中的H,因为"Hello"被存储在程序的静态内存中,并且"Hello"
是不可改变的。
这是否意味着变量s
现在是指向常量数据的指针的变量,例如const int a=3; const int *i=&a;
。似乎是这样,因为我不能操作数据(如果这样做,会导致分段错误)。
但是,如果是这样,编译器不应该能够检测并说我已经把有资格的数据分配给了无资格的变量吗?像char *p
p是指向无资格字符的指针,当我说char *p="Hello"
时,p,指向无资格字符的指针不能指向常量字符类型?
我在这里错过了什么?
如果情况不是上述那样,那么如何使常量字符数组成为不可变的?
s
不是常量(除非另有说明),您仍然可以使用它来指向其他位置。"Hello"
存储在程序的data section
部分,这就是为什么它是不可变的。 - qwn