我知道我们宣布char *c ="Hello";
时意味着我们无法修改此字符串。但是为什么我能够在C中修改这个字符串数组。
char *p [] = {"Hello","World"};
*p = "Mode";
试图修改它会不会给我一个错误?
答案 0 :(得分:6)
你不是在任何地方修改字符串(文字)。
char *p [] = {"Hello","World"};
这里p
is an array (size 2) of pointer-to-char
。这是一个变量,没有任何关于它的只读。它当前指向的字符串是只读的。
*p = "Mode";
您只是将该数组的第一个元素更改为指向另一个(只读)字符串。这与:
相同p[0] = "Mode";
答案 1 :(得分:0)
p
是一个指针数组。这些指针是可修改的,但是它们的目标(它们指向的东西)不是。
*p
等同于p[0]
,它是数组中的第一个指针。
*p = "Mode"
修改指针p[0]
的值,而不是字符串文字"hello"
。