2

我认为这是基本问题,但我不是英语,也没有使用编程语言的术语,这就是我在这里提问的原因(我找不到)。

这是我的背景:

我有一个结构(让我们简化它)如下

struct _unit
{
  char value;
} Unit;

在主程序中,我希望有一排指针指向一排指向结构Unit的其他指针。就像是

int main ()
{
  Unit** units;

  ..

  printf("%d", units[0][0].value);

  ...
}

我有点困惑,要怎么走才能让Unit可以作为多维数组访问。

这是我的尝试

{
  units = (Unit**)malloc(sizeof(void*));

  units[0][0] = (Unit*)malloc(sizeof(Unit));
}
4

2 回答 2

4

您快到了。

首先,您需要将您的类型声明为Unit**. 然后,在此之上,分配足够的Unit*指针来保存行数。最后,遍历那些创建的指针,创建每个Unit.

例如:

int i;
Unit** u;

// Allocate memory to store 50 pointers to your columns.    
u = malloc(sizeof(Unit*) * 50);

// Now, for each column, allocate 50 Units, one for each row.
for(i=0; i<50; i++) {
    u[i] = malloc(sizeof(Unit) * 50);
}

// You can now access using u[x][y];

这是传统的做法。C99 还引入了不同的语法来执行此操作,如下所示:

Unit (*u)[n] = malloc(sizeof(Unit[n][n])) // n = size of your matrix

来自:https ://stackoverflow.com/a/12805980/235700

于 2012-10-14T15:19:32.763 回答
2

您可能误解了 struct 声明的含义。

struct _unit
{
    char value;
} Unit;

您的代码的效果是声明一个结构类型struct _unit并为该类型的一个变量分配空间,名为Unit.

你可能想说的是

struct _unit
{
    char value;
};

typedef struct _unit Unit;

在 C 中,“struct”这个词是类型的一部分,除非你对它进行 typedef。

于 2012-10-14T15:53:12.630 回答