2012-10-14 136 views
2

我認爲這是一個基本的問題,但我不是英語,並沒有使用編程語言的術語,這就是爲什麼我在這裏質疑(我無法找到)。對象中的指針矩陣C

這裏是我的背景:

我有一個結構(讓我們把它簡化)作爲跟隨

struct _unit 
{ 
    char value; 
} Unit; 

,並在主程序中,我想有一個指針是點的排一排其他指針指向結構單位。 喜歡的東西

int main() 
{ 
    Unit** units; 

    .. 

    printf("%d", units[0][0].value); 

    ... 
} 

我變得有點困惑,什麼是可以作爲一個多維數組訪問走得這麼單位的方式。

,這裏是我的嘗試

{ 
    units = (Unit**)malloc(sizeof(void*)); 

    units[0][0] = (Unit*)malloc(sizeof(Unit)); 
} 

回答

4

你幾乎沒有。

首先,您需要像您一樣聲明您的類型爲Unit**。然後,在這一點上,分配足夠的指針來保存行數。最後,循環創建指針,創建每個Unit

例如:

int i; 
Unit** u; 

// Allocate memory to store 50 pointers to your columns.  
u = malloc(sizeof(Unit*) * 50); 

// Now, for each column, allocate 50 Units, one for each row. 
for(i=0; i<50; i++) { 
    u[i] = malloc(sizeof(Unit) * 50); 
} 

// You can now access using u[x][y]; 

這是做它的傳統方式。 C99也推出了不同的語法來做到這一點,如下所示:

Unit (*u)[n] = malloc(sizeof(Unit[n][n])) // n = size of your matrix 

來源:https://stackoverflow.com/a/12805980/235700

2

你可能誤解了結構聲明的含義。

struct _unit 
{ 
    char value; 
} Unit; 

你的代碼的作用是聲明一個結構類型struct _unit以及該類型的,名爲Unit的一個變量分配空間。

你大概的意思說的是

struct _unit 
{ 
    char value; 
}; 

typedef struct _unit Unit; 

在C中,「結構」是類型的一部分,除非你的typedef它。