You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;
}

特殊说明

如果业务场景需要在运行时动态修改该成员的值,有两种选择:

  1. 直接去掉dd成员前的const修饰符,这是最安全合规的方案。
  2. 仅当你明确知道操作后果时,可以通过指针强制转换绕过const限制,该操作属于不安全行为,不推荐使用,示例如下:
data1 demo_struct = {.cc = 100, .dd = aa};
// 强制修改const成员,仅作演示不推荐
*(data2 *)&demo_struct.dd = bb;

内容的提问来源于stack exchange,提问作者aravind arun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 10:09:04