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

如何正确将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:48:03