2011-09-07 70 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