C中的char *和char 之间的区别

可能重复:
C – “char var []”和“char * var”之间的区别?

我写了以下C代码

#include int main() { char name[31]; char *temp; int i ; scanf("%s",name); temp = name; name = temp; } 

编译时出现以下错误

 incompatible types when assigning to type 'char[31]' from type 'char *' 

数组名称是指向第一个元素的指针(这里是char指针..right?)。 对吗?上面的代码意味着字符数组和char *是不同的类型。这是真的吗? 为什么要输入名称!= char *为什么我不能为char指针指定另一个char指针(数组名称)

“数组名称是指向第一个元素的指针(这里是char指针..right?)。对吧?”

 char name[31]; char *temp; /* ... */ name = temp; 

name = temp赋值中, name的值转换为指向char的指针。 转换值, 而不是对象。 该对象仍然是一个数组,并且数组不是可修改的左值。 由于赋值操作数的约束要求赋值运算符的左操作数是可修改的左值,因此出现错误。

数组名称是指向第一个元素的指针(这里是char指针..right?)。 对?

错误。 在大多数上下文中,数组衰减到指向第一个元素的指针,但它们肯定不是指针。 在C FAQ中有一个很好的解释和一个非常宝贵的图片(a是一个数组,p是一个指针):

数组和指针

从类型’char *’分配类型’char [31]’时不兼容的类型

在C数组中是不可修改的左值,你不能改变他们指向的内容,因为它们不会指向任何位置

首先,数组是内存缓冲区,而不是指针,尽管它们可能在需要时被衰减为指针。

现在, name是一个数组,因此您无法分配它。 将数组分配给指针时,数组会衰减为指针,并且赋值有效。

不,指针指向相同类型的对象。 这意味着如果指针被正确分配,它可以用作完全成熟的数组。
一个NON指针意味着你“在你面前”有数据,这不会让你正确获取数据(也有生命周期问题),所以说实话,指针最好在任何地方使用你的情况。

因为’name’是一个数组。 所以这一行:

 name = temp; 

会给你错误的。

你在for循环中的条件也是错误的。 name []将有垃圾值,你不能使用

 name[i]!='\0' 

作为一个条件。