2010-01-15 37 views
0

myRainfallDB是一個三維數組,其中包含有關地球上隨機地點降雨的信息。我想要設置以下陣列結構:C:將陣列正確放置在陣列中

myRainfallDB[]包含地點記錄列表。這些座標必須存儲在雙打中。

myRainfallDB[][]包含

  • 在索引0:雙含有地方
  • 的X座標在索引1:雙含有地方的Y座標
  • 在索引2:陣列包含十二雙打每月

我知道我大概可以更有效率地使用類做存儲的降雨量,但我只是學習C所以我現在只想玩數組。我將如何去宣佈這個3D數組?

回答

4

您需要一個結構或簡單地放置一個用戶定義的數據結構。喜歡的東西:

struct rainfall_t { 
    double x, y; /* location */ 
    double monthly_rainfall[ 12 ]; 
}; 

在C中,陣列是均勻的,即它們只能存儲單一類型的數據。即使對於多維數組。如果沒有首先將它包裝在struct中,則可能無法爲所描述的所有數據創建數組。

然後,您可以創建rainfall_t一個數組,並用它作爲你希望:

struct rainfaill_t db[ 100 ]; /* a DB of 100 locations */ 

您還應該查找動態分配的內存中,你不知道前面,你將有多少地方處理情況用。

2

我認爲不止是數組,你首先需要一個結構來存儲你提到的信息。您需要的結構數組不是3維數組。

struct RainfallDB 
{ 
double XCord; 
double YCord; 
double Mnths[12]; 
}; 

現在在函數中可以聲明一個這樣的數組。

struct RainFallDB raininfo[100]; 

這將存儲100條記錄的信息。如果你不知道用戶想要存儲多少記錄,你可以創建一個鏈表到結構中,並使用malloc動態分配。

希望這會有所幫助。

0

是,作業

struct myRainfallRecord { 
    double x; 
    double y; 
    double **monthlyrainfall; 
} 

和使用結構具有myRainfallRecords的數組。當您填寫結構的值時,可以使用malloc(12 * sizeof(double))來使用mallrain。

+0

如果你要做到這一點(並沒有很好的理由,這裏使用malloc),你會想「雙*」,而不是「雙**」 。 – 2010-01-15 17:16:23

2

你真的不想爲此使用3D數組 - C不擅長處理多維數組。此外,這是很容易對付的名字,而不是數組索引,所以取而代之,創建一個結構:

typedef struct { 
    double x, y; 
    double rainfall[12]; 
} places; 

,然後爲它們創建一個一維數組:

places p[100]; // 100 places 
0

在多維數組的高維由低維數組組成。

所以,只有你的最終數組將包含除數組以外的任何其他數組。

看起來你並不需要那第三個維度,對嗎?

所以:

rfd[][14] = { 
        { X_coord, Y_coord, rain, rain, rain, ... }, 
        { X_coord, Y_coord, rain, rain, rain, ... }, 
        { X_coord, Y_coord, rain, rain, rain, ... }, 
}; 

您需要的地名平行排列。這就是爲什麼人們通常會使用這種類型數據的結構。

char *places[] = { "Spain, the plains", ... }; 

(OR,struct Rain { char *place, double x,y; double rain[12]; };