传递矢量作为指针

时间:2017-01-29 11:18:20

标签: c++ visual-studio-2015

我有一个浮动矢量

vector<float>nFloats;

我想将它传递给以下函数:

/* This is a non-stream oriented interface to just change the speed of a sound sample */
int sonicChangeFloatSpeed(
    float *samples,
    int numSamples,
    float speed,
    float pitch,
    float rate,
    float volume,
    int useChordPitch,
    int sampleRate,
    int numChannels)
{
    sonicStream stream = sonicCreateStream(sampleRate, numChannels);

    sonicSetSpeed(stream, speed);
    sonicSetPitch(stream, pitch);
    sonicSetRate(stream, rate);
    sonicSetVolume(stream, volume);
    sonicSetChordPitch(stream, useChordPitch);
    sonicWriteFloatToStream(stream, samples, numSamples);
    sonicFlushStream(stream);
    numSamples = sonicSamplesAvailable(stream);
    sonicReadFloatFromStream(stream, samples, numSamples);
    sonicDestroyStream(stream);
    return numSamples;
}

有人可以告诉我如何正确地做到这一点吗?

我的尝试

 1) int iRet = sonicChangeFloatSpeed(&nFloats[0], *num, 1, 0.5, 1, 1, 1, 48000, 1);

 2) int iRet = sonicChangeFloatSpeed(nFloats[0], *num, 1, 0.5, 1, 1, 1, 48000, 1);

 3) int iRet = sonicChangeFloatSpeed(*nFloats, *num, 1, 0.5, 1, 1, 1, 48000, 1);
所有人都不能工作。

我确定已经提出过这样的问题,但我找不到任何确切的副本。

有人可以帮忙吗?

谢谢。

2 个答案:

答案 0 :(得分:4)

我认为您的第一个版本应该可以使用,因为向量会为其元素使用连续的存储位置。

int iRet = sonicChangeFloatSpeed(&nFloats[0], nFloats.size(), 1, 0.5, 1, 1, 1, 48000, 1);

在c ++ 11中,您可以使用

float* p = nFloats.data();
int iRet = sonicChangeFloatSpeed(p, nFloats.size(), 1, 0.5, 1, 1, 1, 48000, 1);

答案 1 :(得分:0)

据我所知,您的方法存在问题。

你的功能似乎做了两件事:

1)将一些浮点数写入流

2)从流中读取一些浮点数

在这两种情况下,您都希望浮点数位于vector

对于数字1,可以使用vector,但对于数字2,这是非常有问题的。

您不能将指针传递给向量所持有的数据,然后更改元素数量。原始矢量将保持其原始大小。如果您尝试从流中读取的浮动数超过向量当前持有的浮动数,则行为未定义。

相关问题