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

时间:2012-04-07 11:59:15

标签: c arrays pointers

  

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

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

5 个答案:

答案 0 :(得分:10)

  

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

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

Arrays and pointers

  从类型'char'分配类型'char [31]'时,

不兼容的类型   *'

在C数组中是不可修改的左值,你不能改变它们指向的内容,因为它们没有指向任何地方

答案 1 :(得分:6)

  

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

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

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

name = temp;

会给你错误。

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

name[i]!='\0'

作为条件。