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'
作为一个条件。