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

Jin*_*iel 5 c arrays pointers

可能重复:
C - "char var []"和"char*var"之间的区别?

我写了以下C代码

#include<stdio.h>
int main()
{
    char name[31];
    char *temp;
    int i ;
    scanf("%s",name);
    temp  = name;
    name = temp;

}
Run Code Online (Sandbox Code Playgroud)

编译时出现以下错误

incompatible types when assigning to type 'char[31]' from type 'char *'
Run Code Online (Sandbox Code Playgroud)

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

cni*_*tar 10

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

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

数组和指针

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

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


oua*_*uah 6

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

char name[31];
char *temp;
/* ... */
name = temp;
Run Code Online (Sandbox Code Playgroud)

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