我有一个函数需要float**
类型的参数,但我不知道如何声明和初始化这个变量。
有人可以就此提出任何建议吗?更好的是,它是什么类型的变量?我已经查了几天了,任何搜索结果都是空的。
由于
修改
这是有问题的功能
- (OSStatus)getBuffersInner:(float**)buffers numberOfBuffers:(int)chnls samples:(int)samples
{
int i, j ;
UInt32 frames ;
// zero out requested buffers if client needs more channels than exist in the channel map
for ( i = numberOfMappedChannels; i < chnls; i++ ) memset( buffers[i], 0, samples*sizeof( float ) ) ;
// place buffer pointers into bufferList, following the channelMap
for ( i = 0; i < fileDescriptor.mChannelsPerFrame; i++ ) {
j = inverseChannelMap[i] ;
resampledBufferList.list.mBuffers[i].mData = ( j < 0 || j >= chnls ) ? zeros : buffers[j] ;
}
frames = samples ;
return ExtAudioFileRead( audioFileRef, &frames, &resampledBufferList.list ) ;
}
答案 0 :(得分:5)
这是一个指向指针的指针。以下是一个示例用法:
float f = 0.123;
float *pf = &f;
float **ppf = &pf;
cout << *pf << " == " << **ppf << endl;
您可能需要查看this。
答案 1 :(得分:1)
指针可用于多种用途。在这种情况下,它可能用于动态内存和更改函数中的(指针)值。 通常,它可能是:
void getFloat(float** fl)
{
*fl = new float(1.2);
}
int main()
{
float* fl;
getFloat(&fl);
std::cout << *fl;
delete fl;
}
请注意,传递参数作为指向更改的指针比C ++更具C风格,尽管为了清晰起见,有些人更喜欢传递引用。 在C ++中也不鼓励使用原始指针来动态内存。
答案 2 :(得分:0)
float **ppfloat = new float*;
*ppfloat = new float;
**ppfloat = 3.14;
delete *ppfloat; //actually deletes the float
delete ppfloat; //actually deletes the pointer to float
只是一个&#34;指向浮动的指针&#34;:只是分解句子。
答案 3 :(得分:0)
在您的代码中,float** buffers
包含指向float*
的指针向量。例如,在普通C:
size_t numberOfBuffers = ?;
size_t bufferSize = ?;
unsigned i;
typedef float* buffer_t;
buffer_t* buffers = (buffer_t*)malloc(sizeof(buffer_t) * numberOfBuffers);
for(i=0; i<numberOfBuffers; ++i)
{
buffers[i] = (float*)malloc(sizeof(float) * bufferSize);
}
答案 4 :(得分:0)
从您显示的代码中,看起来函数正在使用
float**
作为指向数组[chnls] of pointers to
floats[
samples`]的指针。在这种情况下,最好的解决方案可能就是使用
类似的东西:
std::vector<float> data( chnls * samples );
// Fill data...
std::vector<float*> args( chnls );
for ( int i = 0; i != args.size(); ++ i ) {
args[i] = &data[0] + (samples * i);
}
将&args[0]
传递给函数。
(如果这看起来很复杂,那就是。这就是我们付出的代价
必须接口C.如果目标函数是C ++,有
比使用float**
更好,更好的解决方案。)
答案 5 :(得分:-1)
它是float [n] [m]矩阵。类似于int main(int argc,char ** argv),其中argv是一个'strings'数组,一个char数组数组。