所以我需要将C库翻译成纯java,到目前为止看起来还不错,但我被困在这里。
有人可以向我解释以下指针的用途是什么吗?
double *DTimeSigBuf[MAX_TIME_CHANNELS];
好的,我知道它是一个名为DTimeSigBuf的双重类型指针,但在括号中是什么?同样MAX_TIME_CHANNELS在h文件中定义为:
#define MAX_TIME_CHANNELS 2
然后在代码中这个常量值会改变,就像它指向其他地方一样,但我不知道究竟意味着什么。它等同于:
double *DTimeSigBuf = MAX_TIME_CHANNELS;
如果我记得很清楚汇编程序中有类似内容,例如:mov [BX], CL
称为间接寻址模式寄存器,这与此有什么关系吗?我知道我可能完全迷失了!因为正如标题所说,我是一名java程序员。
另一个问题是,这样做会产生什么影响:
DTimeSigBuf[chanNum] = (double*)malloc(block_size_samples*sizeof(double));
其中block_size_samples是int而chanNum是迭代器变量吗?
请帮忙!我知道我一直在谷歌搜索。
谢谢大家:)
答案 0 :(得分:5)
这是一个指向double的指针数组。 MAX_TIME_CHANNELS是数组的大小。
使用malloc语句的效果是为block_size_samples双值分配足够大的内存块;然后将内存块的地址分配给DTimeSigBuf数组的chanNum元素。
答案 1 :(得分:3)
它是double类型的数组指针。 MAX_CHANNEL_TIMES是常量,也是数组大小
答案 2 :(得分:3)
DTimeSigBuf
是一个指向double
类型的指针数组。这可以被认为是double
类型的数组数组。
double *DTimeSigBuf[MAX_TIME_CHANNELS];
可以被认为是
double DTimeSigBuf[MAX_TIME_CHANNELS][]
该行
DTimeSigBuf[chanNum] = (double*)malloc(block_size_samples*sizeof(double));
为block_size_samples
个double
类型的变量分配内存,放置在DTimeSigBuf[chanNum]
指向的数组中。
例如:
如果block_size_samples
为4
且chanNum
为1
,您可以这样想:
DTimeSigBuf[1] = new double[4];
答案 3 :(得分:3)
如果你有C代码:
#define MAX_TIME_CHANNELS 2
double *DTimeSigBuf[MAX_TIME_CHANNELS];
在Java中看起来像:
final static int MAX_TIME_CHANNELS = 2;
double DTimeSigBuf[][] = new double[MAX_TIME_CHANNELS][];
这在C:
DTimeSigBuf[chanNum] = (double*)malloc(block_size_samples*sizeof(double));
为y维度分配空间。
在Java中它是:
DTimeSigBuf[chanNum] = new double[block_size_samples];
答案 4 :(得分:2)
DTimeSigBuf
是指向双打的指针数组。
分配是分配一系列双打。也就是说,返回的指针是指向block_size_samples
个数组中第一个双精度的指针。
答案 5 :(得分:1)
如前所述,第一部分声明了一系列指向双打的指针。由于声明不会必然在C中分配内存,第三行是为新的双行分配空间。
打破它:
DTimeSigBuf[chanNum] // chanNum is the position in the array
= // equals
(double*) // memory address to a double
malloc( // get some memory from the system
block_size_samples*sizeof(double)); // number of samples times memory needed for one double