结构体中指向多维数组的指针语法问题求助
正确的结构体初始化与指针赋值语法
1. 结构体实例初始化
你之前的初始化写法存在语法错误,正确方式是直接在初始化列表中给patternptr成员赋值pat_blank——数组名pat_blank会隐式转换为指向其首元素(长度为7的uint8_t数组)的指针,与结构体成员的类型完全匹配:
// 使用C99及以后支持的指定初始化语法,可读性更强 lightingparams newparams = { .patternptr = pat_blank };
如果遵循C89标准,也可以按结构体成员顺序直接初始化:
lightingparams newparams = { pat_blank };
2. 后续给结构体指针成员赋值新值
无需多余的解引用操作,直接通过结构体成员访问符.给patternptr赋值即可:
// 示例:定义另一个同类型二维数组 const uint8_t pat_another[2][7] = {{1,1,1,1,1,1,1}, {2,2,2,2,2,2,2}}; // 直接赋值数组名 newparams.patternptr = pat_another;
补充说明
const uint8_t (*patternptr)[7]是指向包含7个uint8_t元素的数组的指针,而二维数组pat_blank的类型为const uint8_t [2][7],数组名作为右值时会自动转换为指向第一个子数组的指针,二者类型完全兼容,因此可以直接赋值。
内容的提问来源于stack exchange,提问作者achugb
相关产品推荐
相关产品推荐

