C语言动态分配struct结构体数组后如何引用各元素?
C语言动态分配结构体数组的元素访问方案
你动态分配得到的my_struct *data指针,可以直接使用和静态数组完全一致的下标语法访问元素,你之前写的data[0].a = 5;、data[5].b = 10;完全可以正常使用,不需要额外修改语法。
两种合法访问方式
1. 下标访问(最常用,推荐)
和静态数组用法完全相同,C语言的[]运算符本身就支持指针操作,本质是*(data + 索引)的语法糖,会自动按照结构体类型长度做字节偏移。
示例:
data[0].a = 5; data[5].b = 10;
2. 指针偏移+箭头操作符
也可以手动对指针做偏移,通过->操作符访问结构体成员,注意偏移运算的括号不能省略,->优先级高于+:
(data + 0)->a = 5; (data + 5)->b = 10;
注意事项
- 分配内存后务必检查
malloc返回值是否为NULL,避免内存分配失败导致的空指针访问崩溃 - 更推荐
malloc写法:my_struct *data = malloc(sizeof(*data) * 数组长度);,用sizeof(*data)代替固定类型长度,后续修改结构体类型时不需要同步修改sizeof参数,降低出错概率 - 使用完成后必须调用
free(data)释放内存,避免内存泄漏 - C语言本身不做数组下标越界检查,需要自行保证访问的下标在分配的长度范围内
内容的提问来源于stack exchange,提问作者Quick33
相关产品推荐
相关产品推荐

