【问题标题】:Pointer to Two Dimensional Structure Array指向二维结构数组的指针
【发布时间】:2011-09-07 05:43:54
【问题描述】:

我有一个结构说 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 构建成功。但这不是我想要的。

【问题讨论】:

  • “但这不是我想要的。” ,你到底想要什么?
  • 我想使用指针访问 StructArray[0][1].cChar。在这种情况下,它将访问 StructArray[0][0].cChar 而不是这个数组的其他成员。
  • 您已将数组位置[0][0] 处的结构地址分配到指针数组StructPtr 的第0 个元素中。因此StructPtr[0] 现在持有结构StructArray[0][0] 的基地址。因此StructPtr[0]->cChar 会给你cChar 组件StructArray[0][0]
  • @Swanand Purankar:嗯?为什么第一种情况是StructArray[0][1],然后突然StructArray[0][0]?对不起,这一切仍然过于混乱。更好地描述您正在尝试做的事情。

标签: c pointers structure


【解决方案1】:

“现在我想用指针访问它”不是很具有描述性。您在示例中的内容将不起作用。您声明的不是指向数组的指针,而是指针数组。那是你需要的吗?我不知道。

如果你真的需要一个指向数组的指针,你可以将你的指针声明为

struct MyStruct (*StructPtr)[20];

然后让它指向你的数组

StructPtr = StructArray;

从此时起,您可以通过StructPtr[i][j]这个指针访问原始数组

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

或者,您可以将指针声明为

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

然后让它指向你的数组

StructPtr = &StructArray;

从此时起,您可以通过(*StructPtr)[i][j]这个指针访问原始数组

(*StructPtr)[i][j].cChar = 'a';

【讨论】:

  • 但是 struct MyStruct (*StructPtr)[SEC_DIMENSION][20] 将声明 (SEC_DIMENSION*20) 指针,对吧?我想要一个可以访问所有 20 个结构及其成员的单指针,而不是那 20 个!
  • @Swanand Purankar:不,您需要先更熟悉 C 声明。 struct MyStruct (*StructPtr)[SEC_DIMENSION][20] 准确地声明了 one 指针。它将准确声明 一个 指向类型 struct MyStruct[SEC_DIMENSION][20] 的指针。
  • 如果您执行struct MyStruct *StructPtr[SEC_DIMENSION][20],那么您将获得SEC_DIMENSION*20 指针。但是,如果您添加了那些额外的括号,则声明的含义会发生巨大变化。你如何只得到一个指针。
  • 好吧!谢谢!并感谢您清除概念!
【解决方案2】:

我认为您需要一个“指向 struct MyStruct 类型结构的维度 [SEC_DIMENSION][20] 数组的指针”:

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

StructPtr = StructArray;

StructPtr[i][j]->cChar;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-11
    • 2012-01-26
    相关资源
    最近更新 更多