来自java程序员的C编程问题

时间:2012-03-20 19:59:47

标签: c memory pointers allocation

所以我需要将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是迭代器变量吗?

请帮忙!我知道我一直在谷歌搜索。

谢谢大家:)

6 个答案:

答案 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_samplesdouble类型的变量分配内存,放置在DTimeSigBuf[chanNum]指向的数组中。

例如:

如果block_size_samples4chanNum1,您可以这样想:

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