首页 > 解决方案 > 为什么要获取像 `&myArray[i]` 这样的数组元素的地址?二维数组

问题描述

有一些代码可以创建一个像这样的浮点数组:

mData = new float[channelCount * maxFrames];

然后它确实

memcpy(&mData[sampleIndex],
                   buffer,
                   (numSamples * sizeof(float)));

是什么&mData[sampleIndex]意思?好吧,我们有一个浮点数组,我们取该数组的一个元素,然后取该元素的地址。该元素的地址不是mData + sampleIndex吗?

如果我想memcpy通过 for 循环进行更改怎么办?我这样做了,它奏效了:

            for (int i=0; i< numSamples * sizeof(float); i++) {
                (&mData[sampleIndex])[i] = buffer[i];
            } 

但我不知道是什么(&mData[sampleIndex])[i]意思。应该是mData + sampleIndex + i吗?

这段代码应该可以用来记录 microfone wav 数据,所以我们应该能够在多个通道中存储东西。此代码如何管理此类渠道?

标签: c++arrays

解决方案


&mData[sampleIndex] 是什么意思?好吧,我们有一个浮点数组,我们取该数组的一个元素,然后取该元素的地址。该元素的地址不会是 mData + sampleIndex 吗?

是的。

如果我想通过 for 循环更改 memcpy 怎么办?

你的循环不完全做同样的事情。memcpy正在复制numSamples * sizeof(float)字节,而您的循环正在复制numSamples * sizeof(float)浮点数。由于浮点数由多个字节组成(在大多数系统上),这可能会导致缓冲区溢出。

但我不知道 (&mData[sampleIndex])[i] 是什么意思。应该是 mData + sampleIndex + i 吗?

不太一样。(&mData[sampleIndex])[i]将等于*(mData + sampleIndex + i)

此代码如何管理此类渠道?

此代码只是将值从一个数组复制到另一个数组。它不“管理”任何东西。


推荐阅读