为什么我们不能在c中执行此操作:
char name[6];
name = "Jason";
然而,我们可以使用指针。
char name;
char * pName = &name;
pName = "Jason";
数组和指针之间的主要区别是什么?我明白数组是一个固定的常量指针,很公平,但我不太确定如果数组的名称是指针(指针常量)指向数组中的第一个元素为什么不能这是如何工作的我用等号更改该数组元素的内容?我回答了我的问题,说这是一个指针常数,但我没有掌握这个概念!
答案 0 :(得分:2)
因为当您编写"a constant string"
时,编译器会在编译的代码中分配此字符串,如果您c = "a string"
c
是指针,c
现在将指向那个特定的位置。
数组的位置是固定的(你不能说“现在指向别的东西”),所以你应该用strcpy
复制字符串。
strcpy(name, "Jason");
通过这种方式,编译器将在编译的代码中分配"Jason"
,但在执行时,其内容将被复制到专用于name
的内存区域。
答案 1 :(得分:1)
=
赋值运算符的结果,C永远不会复制裸字符串(实际字符数据)。这是因为在C中这样的事情不被视为“值”。您可以将数组嵌入到结构中以使其成为值,如注释中所指出的那样。
你的第一个例子只有在有的情况下才有意义,但事实并非如此。第二个例子只是指定一个指针值,这很好。但是你不能重新分配数组的地址(name
在第一个例子中是一个常量指针)所以没有办法让它工作。
另外,请记住,有多个数组而不是字符数组,在我看来,在=
运算符上为字符数组重载这么多特殊行为会很奇怪。
答案 2 :(得分:1)