myRainfallDB
是一個三維數組,其中包含有關地球上隨機地點降雨的信息。我想要設置以下陣列結構:C:將陣列正確放置在陣列中
myRainfallDB[]
包含地點記錄列表。這些座標必須存儲在雙打中。
myRainfallDB[][]
包含
- 在索引0:雙含有地方
- 的X座標在索引1:雙含有地方的Y座標
- 在索引2:陣列包含十二雙打每月
我知道我大概可以更有效率地使用類做存儲的降雨量,但我只是學習C所以我現在只想玩數組。我將如何去宣佈這個3D數組?
myRainfallDB
是一個三維數組,其中包含有關地球上隨機地點降雨的信息。我想要設置以下陣列結構:C:將陣列正確放置在陣列中
myRainfallDB[]
包含地點記錄列表。這些座標必須存儲在雙打中。
myRainfallDB[][]
包含
我知道我大概可以更有效率地使用類做存儲的降雨量,但我只是學習C所以我現在只想玩數組。我將如何去宣佈這個3D數組?
您需要一個結構或簡單地放置一個用戶定義的數據結構。喜歡的東西:
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 */
您還應該查找動態分配的內存中,你不知道前面,你將有多少地方處理情況用。
我認爲不止是數組,你首先需要一個結構來存儲你提到的信息。您需要的結構數組不是3維數組。
struct RainfallDB
{
double XCord;
double YCord;
double Mnths[12];
};
現在在函數中可以聲明一個這樣的數組。
struct RainFallDB raininfo[100];
這將存儲100條記錄的信息。如果你不知道用戶想要存儲多少記錄,你可以創建一個鏈表到結構中,並使用malloc動態分配。
希望這會有所幫助。
是,作業
struct myRainfallRecord {
double x;
double y;
double **monthlyrainfall;
}
和使用結構具有myRainfallRecords的數組。當您填寫結構的值時,可以使用malloc(12 * sizeof(double))來使用mallrain。
你真的不想爲此使用3D數組 - C不擅長處理多維數組。此外,這是很容易對付的名字,而不是數組索引,所以取而代之,創建一個結構:
typedef struct {
double x, y;
double rainfall[12];
} places;
,然後爲它們創建一個一維數組:
places p[100]; // 100 places
在多維數組的高維由低維數組組成。
所以,只有你的最終數組將包含除數組以外的任何其他數組。
看起來你並不需要那第三個維度,對嗎?
所以:
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]; };
)
如果你要做到這一點(並沒有很好的理由,這裏使用malloc),你會想「雙*」,而不是「雙**」 。 – 2010-01-15 17:16:23