我写了以下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指针(数组名称)
答案 0 :(得分:10)
数组名是指向第一个元素的指针(这里是char指针..right?)。 正确?
错误。数组衰减指向大多数上下文中第一个元素的指针,但它们肯定不是指针。在C FAQ中有一个很好的解释和一个非常宝贵的图片(a是数组,p是指针):
从类型'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'
作为条件。