2012-03-20 44 views
4

所以我需要將C庫轉換爲純Java,到目前爲止它看起來不錯,但我被困在這裏。來自java程序員的C編程問題

有人可以向我解釋下面的指針是什麼?

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是對迭代變量?

請幫忙!我知道我一直在使用Google搜索。

謝謝各位:)

+2

不Java也有括號?他們在C. – 2012-03-20 20:03:05

+5

中提供類似的目的,這些問題已經足夠基本了,而不是問個別問題,你應該首先看看教程 - 特別是看看數組 – Mark 2012-03-20 20:03:53

回答

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_samples4chanNum1,你可以這樣設想一下:

DTimeSigBuf[1] = new double[4]; 
+0

Nit:它是一個指向'double'的指針數組,不是一個指向'double'數組的指針。 – 2012-03-20 20:58:57

+0

@JohnBode - 已修復。 – ken 2012-03-20 21:39:06

5

這是一個指向double數組的指針數組。 MAX_TIME_CHANNELS是數組的大小。

malloc語句的影響是分配一塊足夠大的block_size_samples double值的內存塊;然後將內存塊地址分配給DTimeSigBuf數組的chanNum元素。

+0

順便說一句#define MAX_TIME_CHANNELS 2,將導致預編譯器將替換爲2 MAX_TIME_CHANNELS的每一個ocurrece,所以聲明將編譯爲double * DTimeSigBuf [2]; – LuisEspinoza 2012-03-20 20:12:24

2

DTimeSigBuf是指向雙打的指針數組。

分配是分配一個雙打數組。也就是說,返回的指針是指向block_size_samples雙精度數組中第一個雙精度的指針。

3

它是一個double類型的數組指針。 MAX_CHANNEL_TIMES是常數,也是數組大小

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 
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]; 
+0

謝謝!這非常非常有用! – RicardoE 2012-03-21 20:40:20