C语言中结构体含const enum类型成员时该如何正确赋值?
C语言const修饰结构体成员的正确赋值方法
首先明确你现有代码中的两个核心错误:
data2是你通过typedef定义的枚举类型名,并不是变量,不能直接用类型名访问结构体data1的成员,必须先实例化data1类型的变量才能操作成员。- 结构体中被
const修饰的成员是只读属性,仅支持在变量定义的初始化阶段赋值,变量定义完成后不允许再单独修改该成员,否则属于语法非法操作。
正确实现代码
#include <stdio.h> typedef enum { aa = 11, bb = 13 } data2; typedef struct { int cc; const data2 dd; } data1; int main() { // 方式1:指定成员初始化(推荐,可读性高) data1 demo_struct = {.cc = 100, .dd = bb}; // 方式2:顺序初始化,按结构体成员定义顺序赋值 // data1 demo_struct = {100, aa}; printf("%d", demo_struct.dd); return 0; }
特殊说明
如果业务场景需要在运行时动态修改该成员的值,有两种选择:
- 直接去掉
dd成员前的const修饰符,这是最安全合规的方案。 - 仅当你明确知道操作后果时,可以通过指针强制转换绕过const限制,该操作属于不安全行为,不推荐使用,示例如下:
data1 demo_struct = {.cc = 100, .dd = aa}; // 强制修改const成员,仅作演示不推荐 *(data2 *)&demo_struct.dd = bb;
内容的提问来源于stack exchange,提问作者aravind arun
相关产品推荐
相关产品推荐

