我写了下面的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 *'
Array
name
是指向第一个元素的指针(这里是 char 指针 .. 对吗?)。正确的?上面的代码表示字符数组和char*
是不同的类型..是真的吗?
为什么是name != char *
的类型?
为什么我可以将另一个 char
指针分配给一个 char
指针(name
数组)?
数组名是指向第一个元素的指针(这里是 char 指针 ..对吧?)。 对吧?
错了。在大多数情况下,数组decay 指向第一个元素的指针,但它们肯定不是指针。 C FAQ 中有一个很好的解释和一张无价的图片(a 是一个数组,p 是一个指针):
从类型“char”分配给类型“char[31]”时类型不兼容 *'
在 C 中,数组是不可修改的左值,您无法更改它们指向的内容,因为它们一开始就没有指向任何地方.
“数组名称是指向第一个元素的指针(这里是 char 指针 .. 对吗?)。对吗?”
char name[31];
char *temp;
/* ... */
name = temp;
在
name = temp
赋值中,name
的值被转换为指向char
的指针。值被转换,not 对象。该对象仍然是一个数组,并且数组不是可修改的左值。由于赋值操作数的约束要求赋值运算符的左操作数是可修改的左值,因此出现错误。
首先,数组是内存缓冲区,而不是指针,尽管它们在需要时可能会衰减为指针。
现在,
name
是一个数组,所以你不能给它赋值。当您将数组分配给指针时,数组会衰减为指针,并且分配有效。
不,指针指向相同类型的对象。这意味着如果分配正确,指针可以用作完全成熟的数组。
NON 指针意味着你的数据“在你面前”,这不会让你正确地获取数据(也有生命周期问题),所以老实说,指针最好在任何地方使用你的情况。
因为'name'是一个数组。所以 这一行:
name = temp;
会给你错误。
你在 for 循环中的条件也是错误的。 name[] 会有垃圾值,你不能使用
name[i]!='\0'
作为条件。