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

C++中如何将二级指针**ptr的第N个元素赋值给变量?

解决C++二级指针数组访问特定元素的问题

首先咱们先理清楚你的数据结构:audioArrays 是一个存储字符串数组指针的数组,简单来说就是:

  • audioArrays[0] 指向 turretDetectionWavFiles 这个字符串数组的首地址
  • audioArrays[1] 指向 turretActivationWavFiles 这个字符串数组的首地址
  • 以此类推

你当前代码里的问题是:audioArraysChars = audioArrays[0]; 只是把 turretDetectionWavFiles 的首地址赋值给了指针,所以它默认指向这个数组的第一个元素(也就是 "turret_active_1.wav"),这就是你总是拿到它的原因。

怎么获取目标元素?

要访问 turretActivationWavFiles 里的第N个元素,你需要做两次索引:

  1. 先用 audioArrays[1] 定位到 turretActivationWavFiles 数组
  2. 再用 [索引值] 取这个数组里的具体元素

注意:C++数组是0开始索引的,所以“第3个元素”(从1开始数)对应的索引是2;如果是从0开始数的第3个元素,索引就是3。

修改后的代码示例

我给你调整了代码,加上了获取 turretActivationWavFiles 第3个元素的逻辑,同时修正了原代码里运算符优先级的小问题:

void AudioClass::playAudio(char* incomingData, int MAX_DATA_LENGTH, const char** audioArrays, const int sizeOfAudioArrays)
{
    // 建议改名,更清晰表示这是目标音频文件路径
    const char* targetAudioFile{};
    int audioArraysIndex{};

    // 处理turretDetectionWavFiles的情况
    if (strcmp(incomingData, "turretDetectionWavFiles") == 0)
    {
        // 比如取这个数组的第0个元素
        targetAudioFile = audioArrays[0][0];
        audioArraysIndex = 0;
    }
    // 新增处理turretActivationWavFiles的分支
    else if (strcmp(incomingData, "turretActivationWavFiles") == 0)
    {
        // 这里取turretActivationWavFiles的第3个元素(从1开始数,索引为2)
        targetAudioFile = audioArrays[1][2];
        audioArraysIndex = 1;
    }

    // 这里可以添加播放逻辑,比如传入targetAudioFile到播放函数
    // play(targetAudioFile);
}

几个需要注意的点

  1. 原代码里的 if ((strcmpResult = strcmp(...) == 0)) 有运算符优先级问题:== 比 = 优先级高,所以实际是把 strcmp(...) == 0 的布尔值(0或1)赋值给了 strcmpResult,如果不需要保存strcmp的返回值,直接用 if (strcmp(...) == 0) 更简洁安全。
  2. 一定要确保 turretActivationWavFiles 数组的长度足够,比如你要取索引2的元素,这个数组至少要有3个元素,否则会触发数组越界,导致未定义行为(程序崩溃、乱码等)。
  3. 如果需要随机获取这个数组里的元素,可以用随机数生成索引,比如 rand() % arrayLength,记得先初始化随机种子。

内容的提问来源于stack exchange,提问作者Marschall Gábor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 17:48:13