2011-09-29 78 views
2

是否可以創建一個未知高度但寬度設置的數組?C中二維數組固定寬度但高度未知?

,以便它可以是這樣的:

|----------8-----------| 

[0][0][0][0][0][0][0][0] | 
[1][1][1][1][1][1][1][1] | 
[2][2][2][2][2][2][2][2] | 
[3][3][3][3][3][3][3][3] \|/ 

這樣,因爲它需要但是停留寬8輛花車也可以大有所爲。

我有一種感覺,聲明看起來有點像:

float *array[8] // maybe??? 

float array[8][] // idk??? 

我不是用來在VAR多個指針(我弄糊塗還是)。我使用蘋果的可可框架很多,所以我通常會使用NSArray,但我正在構建的東西需要一個基於C的數組而不是一個類。

+3

你所說的高度和寬度意思?數組[寬度] [高度]或數組[高度] [寬度]? –

回答

4

採取嘗試這種情況:

float (*array)[8]; 

...它聲明array作爲指針以浮動的8元件陣列。

然後可以對整個事情分配空間,如下所示:

array = malloc(sizeof(*array) * num_elements); 

然後,array[3][0],例如,將訪問第一浮子8浮起的第四陣列英寸

+0

謝謝。我從來沒有想過使用括號。正如我對布萊恩說的,我希望我可以選擇2個答案。謝謝。 –

3
float *array[8]; 

現在你有一個8 float指針的數組。

有關這些每一個,你會再需要的時候,你知道需要多大的空間分配空間:

array[0] = calloc(numMembers, sizeof(float)); 

如果您後來決定你需要一個特定的第二尺寸要大一些,你會需要重新分配。

+0

爲什麼他只有7個「浮點」指針? –

+0

因爲我的大腦常常不能很好地與我的手指交流:) Thx - 固定。 –

+0

@BrianRoach Dude我一直都在這個網站上看到你。我想感謝你爲我和這個社區的其他成員提供的所有幫助。我希望我可以選擇2個答案。再次謝謝你。 –

0

是它definatly是:

float *p2DArray[8]; 

    for (int i = 0; i < HEIGHT; ++i) { 
    p2DArray[i] = (float*)malloc(sizeof(float)*WIDTH); 
    } 

Multi-Dimensional Arrays

+0

C何時獲得「新」? ;) –

+0

非常真實:P我一看到C++代碼就改變了它,大量的C++對於C編程不利。 – Serdalis

+0

@Serdalis我知道你的感受。我花了6個月的時間進行組裝,當我回到C時,我覺得指針太複雜了。 XD –

0

作爲參數傳遞給函數,您可以要求未知高度的二維數組,像這樣

void foo(int arr[][8]) 
{ 
    //...do stuff with arr... 
}