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

C语言中获取数组内结构体地址时const限定符警告问题

解决const结构体数组指针赋值的编译警告问题

问题根源是指针类型不匹配:info是const s类型的数组,所以&info[0]的类型是const s*(指向const结构体的指针),而你声明的thisInfo是s*(普通结构体指针),直接赋值会丢弃const限定符,触发编译器警告——这是编译器在提醒你:你可能会通过普通指针修改原本应该只读的const变量,违反了const的语义。

正确的解决方法(推荐)

把thisInfo的类型修改为const s *,让指针也带上const限定,匹配数组元素的只读属性:

typedef struct { int a; int b; } s;
static const s info[2] = { {.a=1, .b=2}, {.a=3, .b=4} };
static const s *thisInfo; // 修改指针类型为const s*

// 赋值不再触发警告
thisInfo = &info[0];

这样做既符合语义(保证不会通过thisInfo修改info的内容),也能让编译器继续把info放在Flash这类只读存储区,满足你的需求。

不推荐的临时 workaround(仅特殊场景用)

如果确实有特殊需求必须用非const指针指向const变量(不建议这么做,因为会破坏只读语义,嵌入式环境中修改Flash内容会直接出错),可以用强制类型转换消除警告:

thisInfo = (s *)&info[0];

但这种写法会绕过编译器的const检查,可能导致未定义行为,除非你非常清楚自己在做什么,否则不要使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 04:26:00