首页 > 解决方案 > 为什么我不能为数组元素赋值?

问题描述

在这个 C 程序中:

#include <stdlib.h>

struct mystruct
{};

int
main()
{
  struct mystruct* obj = malloc(sizeof(struct mystruct));
  struct mystruct(*list)[10];
  list[0] = obj;
}

基本上,我正在尝试创建一个固定大小的指针数组(指向某个结构)。

main错误“表达式必须是可修改的左值”中的最后一行结果。但为什么?

我知道您不允许分配给数组,但我不想分配给数组,我想分配给指针。

标签: cpointerstypes

解决方案


我正在尝试创建一个固定大小的指针数组

但你不是:你正在创建一个指向固定大小的结构数组的指针。您可以使用cdecl来帮助您处理复杂类型的语法。

cdecl> explain struct mystruct(*list)[10];
declare list as pointer to array 10 of struct mystruct
cdecl> explain struct mystruct *list[10];
declare list as array 10 of pointer to struct mystruct

来自 GCC 和 Clang 的错误消息比您的编译器更清晰。考虑使用多个编译器来获得有关您的代码的更多反馈。

% gcc -Wall -O a.c
a.c: In function ‘main’:
a.c:11:11: error: assignment to expression with array type
   11 |   list[0] = obj;
      |           ^
$ clang -Wall -O a.c
a.c:11:11: error: array type 'struct mystruct [10]' is not assignable
  list[0] = obj;
  ~~~~~~~ ^
1 error generated.

推荐阅读