3

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

#include <stdlib.h>
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'应该被认为是一个右值吗?我不确定我是否正确理解了这个概念

4

3 回答 3

8

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

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

数组地址不能更改,但内容可以更改。

于 2012-06-06T16:19:54.173 回答
5

数组是不可修改的左值。您不能为它分配任何东西,但您可以将一元运算&符应用于它。

当您说这里不char *涉及变量时,您是对的。数组名直接指数组对象——一块连续的内存块,其大小等于元素个数和元素大小的乘积。

于 2012-06-06T16:22:43.223 回答
4

我认为数组名称只是指针

不,他们不是。它们是数组。当您将它们作为参数传递时,它们会衰减为指针,仅此而已。您不能重新分配数组,只能更改单个值。

于 2012-06-06T16:19:27.570 回答