2014-02-26 46 views
1

嘗試創建包含三個數組的struct。我不確定在讀取輸入之前有多大的數組。是否有可能在沒有在struct中聲明特定大小的情況下創建數組?

如何初始化這些數組在結構中,如果我不確定它們將在struct init中有多大?我會知道第一行輸入的總金額。

我將是從使用輸入中讀入的大小。我應該讓我成爲一個龐大的數字嗎? :您需要使用malloc與一次讀取用戶規模

struct TaskSet 
{ 
    float *priority; 
    int size_priority; 
    ... 
    float *d; 
    int size_d; 
}; 

P.S:

struct TaskSet 
{ 
    float priority[i]; 
    float p[i]; 
    float w[i]; 
    float d[i]; 
}; 

回答

5

您可以使用一個巨大的數字或(與大小一起)使用T *arr

+1

然後使用從用戶讀取的大小的malloc。 :) – prmottajr

+1

@prmottajr是的,添加到答案。謝謝。 – herohuyongtao

+2

這裏的解決方案比使用一個巨大的數字爲我好幾個原因。首先,你永遠無法確定自己「足夠大」,其次,幾乎所有的時間你都會浪費「巨大」的空間。如此處所述,動態分配恰恰是正確的解決方案。 – jakebower

0

結構在編譯時需要是已知的大小,以便編譯器知道給內存中每個結構賦予多少空間。考慮以下結構:

struct pair{ 
    int a; 
    int b; 
}; 

當你創建一個struct作爲函數變量,編譯器堆棧上的兩個整數創造了足夠的空間。如果創建五個結構的陣列(見下文)編譯器爲2×5 = 10在堆棧上連續的整數創建足夠的空間:

struct pair p[5]; 

這是不可能的編譯器在堆棧上創建一個結構如果它不提前知道結構的大小。

指針總是相同的大小,所以我建議使用指針的結構,就像在herohuyongtao的示例代碼中一樣。

相關問題