是一个rvalue数组的名称?

可能重复:
数组名是C中的指针吗?

#include  int main(int argc, const char *argv[]) { char *b=(char*)malloc(sizeof(char)*50); b=(char*)"hello world"; // works char a[50]; a=(char*)"hello world"; //doesn't work. why? I thought array names are just pointers that point //to the first element of the array (which is char). so isn't a char*? return 0; } 

我认为它不起作用的原因是因为没有名为“a”的变量实际存储char *值。 那么’a’应该被视为右值吗? 我不确定我是否正确理解了这个概念

数组不是指针, 有时 [注1:]当数组名无效时,数组的名称会衰减为指针( 例如:传递给函数 )。
数组是不可修改的l值 ,它们不能分配,并且可以采用地址。

[注1:]
例如:
sizeof()使用时,数组名称不会衰减为指针

无法更改arrays地址,但可以更改内容。

数组是一个不可修改的左值。 您无法为其指定任何内容,但您可以将一元&运算符应用于它。

当你说这里没有涉及char *变量时你是对的。 数组名称直接引用一个数组对象 – 一个连续的内存块,其大小等于元素数和元素大小的乘积。

我认为数组名称只是指针

不,他们不是。 他们是arrays。 当你将它们作为参数传递时,它会衰减为指针,但这就是它。 您无法重新分配数组,只能更改单个值。