C结构体数组

7
typedef struct Expected {

   const int number;
   const char operand;

} Expected;   

Expected array[1];
Expected e = {1, 'c'};
array[0] = e;

我不明白为什么不能像那样添加结构数组。我需要自己计算内存中的位置吗?


编译器给出了什么错误信息? - mlp
7
你试图修改一个常量值? - tunglt
只读位置“array[0]”的赋值 - Aristos Georgiou
首先将成员变量设为非常量。 - Roflcopter4
1
当你说“添加到结构体数组”时,是指使数组变大还是更改现有值?最好写成“分配给结构体数组”。 - Tim Randall
3个回答

10

Expected元素被声明为const,这意味着它们不能被修改。

为了设置值,需要在变量定义时进行初始化

Expected array[1] = { {1, 'c'} };

在这种情况下,你使用的数组并不重要。


5
将结构体成员设置为const意味着您不能对它们进行写操作。移除这个限制后,代码可以正常工作。
typedef struct Expected {

   int number;
   char operand;

} Expected;

4

不允许这样做是因为structconst成员:

error: assignment of read-only location array[0]

array[0] = e;
当一个结构体有一个const成员时,整个结构体也无法被赋值。
如果可以像这样分配数组元素,那么就可以通过这种方式规避结构体的任何成员的const属性:
Expected replacement = {.number = array[0].number, .operand = newOperand}; // << Allowed
array[0] = replacement; // <<== This is not allowed

编译器将该赋值操作标记为错误 (演示)。
如果您需要保留const,则必须使用初始化程序构建数组,而不能使用分配。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接