如何正确将struct指针数组传入函数?现有写法无法获取第二个元素
正确传递struct指针数组的实现方法
原代码问题分析
- 你的
doIt函数当前参数是c* s,属于指向c结构体实例的单指针,只能接收c类型普通数组的首地址,s++的步进长度是sizeof(c),和指针数组的元素步进长度(对应平台的指针长度,一般32位系统4字节、64位系统8字节)不匹配,自然无法正确读取第二个元素。
正确实现步骤
1. 调整函数参数类型
指针数组的首元素是结构体指针,数组名退化为指针后是二级指针,所以参数要声明为二级指针,同时建议传入数组长度避免越界:
void doIt(c** s, int arrLen) { // 读取第一个元素 cout << s[0]->b << endl; // 读取第二个元素 cout << s[1]->b << endl; // 也可以用指针偏移写法 s++; // 步进长度为指针大小,指向第二个c*元素 cout << (*s)->b << endl; }
2. 构造指针数组并调用
先构造你需要的结构体指针数组,再传入函数即可:
int main() { // 构造c类型的指针数组,元素是各c实例的地址 c* c_ptr_arr[] = {&d1, &d2, &d3}; // 调用函数,传入数组和数组长度 doIt(c_ptr_arr, sizeof(c_ptr_arr)/sizeof(c_ptr_arr[0])); return 0; }
补充说明
如果你需要传递的是cc类型的指针数组,逻辑完全一致,只需要把函数参数类型替换为cc**,构造对应cc指针数组传入即可。
内容的提问来源于stack exchange,提问作者vico
相关产品推荐
相关产品推荐

