2017-09-24 58 views
0

我有以下聲明typedef結構和函數newStruct。該結構包含兩個整數,即var1和var2。不過,我也想在結構體中存儲一個2D int數組,其大小爲var1和var2,即int arr[var1][var2]。如何實現這一目標?如何在基於var1和var2的typedef結構中添加二維數組?

typedef struct _mystruct * myStruct;

typedef struct _mystruct{ 
    int var1; 
    int var2; 
    //I also want to add an array here like so: int arr[var1][var2]; 
}mystruct; 

myStruct newStruct (int v1, int v2){ 
    myStruct newSt; 
    newSt = malloc(sizeof(struct _mystruct)); 

    newSt->var1 = v1; 
    newSt->var2 = v2; 

    return newSt; 
} 
+0

研究_flexible陣列member_要關閉。 – chux

+0

使用'int ** arr;'而不是。 – BLUEPIXY

回答

1
typedef struct _mystruct{ 
    int var1; // width 
    int var2; // height 
    int arr[]; // flexible array member 
}mystruct; 

myStruct newStruct (int v1, int v2){ 
    myStruct newSt; 
    size_t arrbytes = sizeof(int) * v1 * v2; 
    newSt = malloc(sizeof(struct _mystruct) + arrbytes); 

    newSt->var1 = v1; 
    newSt->var2 = v2; 
    memset(&newSt->arr, 0, arrbytes); 
    return newSt; 
} 

現在你可以索引到這樣的:

arr[i + j * var1] 

也就是說,你分配額外的空間結構,在年底的二維數組,雖然它被保存在一個似乎是一維的方式。然後,使用一些算術將012(0,,)轉換爲1D座標,將其編入arr

相關問題