2011-09-07 66 views
1

我有一個結構說MYSTRUCT: -指向二維結構陣列

#define SEC_DIMENSION 2 
struct MyStruct 
{ 
    char cChar; 
    float fFloat; 
    int iInt; 
}; 

struct MyStruct StructArray[SEC_DIMENSION][20]; //Two Dimensional Array of Structures. 

現在我想用指針來訪問此。

struct MyStruct *StructPtr[SEC_DIMENSION]; 

我做了分配如下: -

StructPtr[0] = &StructArray[0][0]; 

現在,我想訪問結構的成員StructArray [0] [1]即StructArray[0][1].cCharStructArray[0][1].fFloat

我怎麼能訪問它們通過使用StructPtr?

我試過使用StuctPtr[0][1]->cChar然後((StructPtr[0])[1])->cChar 兩者都返回一個錯誤。

隨着StructPtr[0]->cChar建立成功。但這不是我想要的。

+0

「但這不是我想要的。」 ,你想要什麼? – phoxis

+0

我想使用指針訪問StructArray [0] [1] .cChar。在這種情況下,它將訪問StructArray [0] [0] .cChar而不是此數組的其他成員。 – Swanand

+0

您已經將自己的數組位置'[0] [0]'處的結構地址分配給指針數組structPtr的第0個元素。因此'StructPtr [0]'現在擁有結構'StructArray [0] [0]'的基地址。因此'StructPtr [0] - > cChar'會給你'StructArray [0] [0]'的cChar組件' – phoxis

回答

1

「現在我想用指針訪問這個」不是非常具有描述性。你的例子中有什麼不會奏效。你聲明的不是一個指向數組的指針,而是一個指針數組。那是你需要的嗎?我不知道。

如果你真的需要一個指向數組的指針,你可以聲明指針作爲

struct MyStruct (*StructPtr)[20]; 

,然後使它指向你的數組作爲

StructPtr = StructArray; 

從這一點上,你可以通過該指針訪問原始陣列StructPtr[i][j]

StructPtr[i][j].cChar = 'a'; 

Alt ernatively,你可以聲明指針

struct MyStruct (*StructPtr)[SEC_DIMENSION][20]; 

,然後使它指向你的數組作爲

StructPtr = &StructArray; 

從這一點上,你可以爲(*StructPtr)[i][j]

(*StructPtr)[i][j].cChar = 'a'; 
通過該指針訪問原始數組
+0

但是struct MyStruct(* StructPtr)[SEC_DIMENSION] [20]會聲明(SEC_DIMENSION * 20)指針,對嗎?而不是那20,我想要一個單指針,我可以訪問所有20個結構及其成員! – Swanand

+1

@Swanand Purankar:不需要。您需要先熟悉C語言。 'struct MyStruct(* StructPtr)[SEC_DIMENSION] [20]'聲明**一個**指針。它將聲明**一個**指針,指向'struct MyStruct [SEC_DIMENSION] [20]'類型。 – AnT

+1

如果你做'struct MyStruct * StructPtr [SEC_DIMENSION] [20]',那麼你會得到'SEC_DIMENSION * 20'指針。但是你添加了那些額外的括號,聲明的含義就會發生巨大的變化。你如何得到一個指針。 – AnT

1

我想你需要一個「指向結構類型爲struct MyStruct」的尺寸爲[SEC_DIMENSION] [20]的數組的指針:

struct MyStruct (*StructPtr)[SEC_DIMENSION][20]; 

StructPtr = StructArray; 

StructPtr[i][j]->cChar; 
+0

謝謝@phoxis,我已經從上面的答案中得到了這個! – Swanand