char *string = "a";
string = "abc";
以上代码有效。
char string2 [2] = "a";
string2 = "abc";
第二段代码无效。为什么? string2
char*
不是string
吗?同一类型如何具有不同的属性?
答案 0 :(得分:2)
string
是指向char
的指针。 string2
是char
个元素的数组。这两种是不同的类型。
在你的第二个例子中,你试图指定一个指向数组的指针(字符串文字计算为指针。)这没有任何意义,也是不可能的。它真的没有什么不同:
int numbers[2];
int num;
numbers = # // How's that supposed to work?
人们对此感到有些困惑,因为您可以在指针上使用索引运算符[]
,并且数组的名称将计算为指向其第一个元素的指针。这并不意味着指针是数组,反之亦然。这只是一些语法糖,可以更容易地访问指向或包含的数据。
答案 1 :(得分:0)
第二段代码无效。为什么?
因为数组名称是不可修改的l值。
string2
不是char*
string
吗?
没有。 string2
是2
char
的数组,而string
是指向char
的指针。
同一类型如何具有不同的属性?
请记住, 指针不是数组 。 string
和string2
属于不同类型。
答案 2 :(得分:0)
在第二个代码中,您尝试将新字符串分配给数组。
在C数组中不能直接赋值。您可以使用strcpy
char string2 [2] = "a";
strcpy(string2, "ab");