5

可能重复:
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;

}

编译时出现以下错误

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

数组名称是指向第一个元素的指针(这里是 char 指针..对吗?)。对吧?上面的代码表示字符数组和char*是不同的类型..是真的吗?为什么名称类型!= char * 为什么我不能将另一个 char 指针分配给 char 指针(数组名称)

4

5 回答 5

10

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

错误的。在大多数情况下,数组衰减为指向第一个元素的指针,但它们肯定不是指针。C FAQ中有一个很好的解释和一张无价的图片(a 是一个数组,p 是一个指针):

数组和指针

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

在 C 中,数组是不可修改的左值,您无法更改它们指向的内容,因为它们一开始并不指向任何地方

于 2012-04-07T12:00:55.893 回答
6

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

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

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

于 2012-04-07T12:18:58.400 回答
1

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

现在,name是一个数组,所以你不能分配给它。当你把一个数组赋值给一个指针时,这个数组衰减为一个指针,赋值是有效的。

于 2012-04-07T12:00:48.400 回答
1

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

于 2012-04-07T12:01:48.183 回答
1

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

name = temp;

会给你错误。

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

name[i]!='\0'

作为条件。

于 2012-04-07T12:02:31.293 回答