C++中如何将二级指针**ptr的第N个元素赋值给变量?
解决C++二级指针数组访问特定元素的问题
首先咱们先理清楚你的数据结构:audioArrays 是一个存储字符串数组指针的数组,简单来说就是:
audioArrays[0]指向turretDetectionWavFiles这个字符串数组的首地址audioArrays[1]指向turretActivationWavFiles这个字符串数组的首地址- 以此类推
你当前代码里的问题是:audioArraysChars = audioArrays[0]; 只是把 turretDetectionWavFiles 的首地址赋值给了指针,所以它默认指向这个数组的第一个元素(也就是 "turret_active_1.wav"),这就是你总是拿到它的原因。
怎么获取目标元素?
要访问 turretActivationWavFiles 里的第N个元素,你需要做两次索引:
- 先用
audioArrays[1]定位到turretActivationWavFiles数组 - 再用
[索引值]取这个数组里的具体元素
注意: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); }
几个需要注意的点
- 原代码里的
if ((strcmpResult = strcmp(...) == 0))有运算符优先级问题:==比=优先级高,所以实际是把strcmp(...) == 0的布尔值(0或1)赋值给了strcmpResult,如果不需要保存strcmp的返回值,直接用if (strcmp(...) == 0)更简洁安全。 - 一定要确保
turretActivationWavFiles数组的长度足够,比如你要取索引2的元素,这个数组至少要有3个元素,否则会触发数组越界,导致未定义行为(程序崩溃、乱码等)。 - 如果需要随机获取这个数组里的元素,可以用随机数生成索引,比如
rand() % arrayLength,记得先初始化随机种子。
内容的提问来源于stack exchange,提问作者Marschall Gábor
相关产品推荐
相关产品推荐

