c - 为什么我不能为数组元素赋值?
问题描述
在这个 C 程序中:
#include <stdlib.h>
struct mystruct
{};
int
main()
{
struct mystruct* obj = malloc(sizeof(struct mystruct));
struct mystruct(*list)[10];
list[0] = obj;
}
基本上,我正在尝试创建一个固定大小的指针数组(指向某个结构)。
main
错误“表达式必须是可修改的左值”中的最后一行结果。但为什么?
我知道您不允许分配给数组,但我不想分配给数组,我想分配给指针。
解决方案
我正在尝试创建一个固定大小的指针数组
但你不是:你正在创建一个指向固定大小的结构数组的指针。您可以使用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.