- 此问题在此处已有答案**:
10年前关闭了。
- 可能重复:**
C - Difference between “char var[]” and “char *var”?
我写了下面的C代码
#include<stdio.h>
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 *'
数组name
是指向第一个元素的指针(这里是字符指针..对吗?)。对吗?上面的代码意味着字符数组和char*
是不同的类型..是真的吗?为什么类型是name != char *
?为什么我可以将另一个char
指针赋给char
指针(name
数组)?
5条答案
按热度按时间uqxowvwt1#
数组名是指向第一个元素的指针(这里是字符指针,对吗?
错了。在大多数情况下,数组 * 衰减 * 为指向第一个元素的指针,但它们肯定不是指针。在C FAQ中有一个很好的解释和一个非常有价值的图片(a是数组,p是指针):
从类型“char *”分配给类型“char[31]”时,类型不兼容
在C中数组是不可修改的左值,你不能改变它们指向什么,因为它们一开始就不指向任何地方。
4c8rllxm2#
“数组名是指向第一个元素的指针(这里是字符指针..对吗?).对吗?”
在
name = temp
赋值中,name
的值转换为指向char
的指针。转换的是值,不是对象。对象仍是数组,并且数组不是可修改的左值。由于赋值操作数的约束要求赋值运算符的左操作数是可修改的左值,因此出现错误。z9zf31ra3#
首先,数组是内存缓冲区,而不是指针,尽管在需要时它们可能会衰减为指针。
现在,
name
是一个数组,所以你不能给它赋值。当你给一个数组赋值给一个指针的时候,这个数组衰减为一个指针,赋值是有效的。vmdwslir4#
不,指针指向一个相同类型的对象。这意味着一个指针如果分配正确,可以作为一个完全成熟的数组使用。
NON指针意味着数据在这里“摆在你面前”,这样你就不能正确地获取数据(还有生存期问题),所以老实说,指针最好在你的情况下随处使用。
yhived7q5#
因为'name'是一个数组。所以这一行:
会给予你错误。
此外,for循环中的条件是错误的。name[]将包含垃圾值,您无法使用
作为条件。