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
相关产品推荐
相关产品推荐

