2012-10-14 80 views
2

我认为这是一个基本的问题,但我不是英语,并没有使用编程语言的术语,这就是为什么我在这里质疑(我无法找到)。对象中的指针矩阵C

这里是我的背景:

我有一个结构(让我们把它简化)作为跟随

struct _unit 
{ 
    char value; 
} Unit; 

,并在主程序中,我想有一个指针是点的排一排其他指针指向结构单位。 喜欢的东西

int main() 
{ 
    Unit** units; 

    .. 

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

    ... 
} 

我变得有点困惑,什么是可以作为一个多维数组访问走得这么单位的方式。

,这里是我的尝试

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

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

回答

4

你几乎没有。

首先,您需要像您一样声明您的类型为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

2

你可能误解了结构声明的含义。

struct _unit 
{ 
    char value; 
} Unit; 

你的代码的作用是声明一个结构类型struct _unit以及该类型的,名为Unit的一个变量分配空间。

你大概的意思说的是

struct _unit 
{ 
    char value; 
}; 

typedef struct _unit Unit; 

在C中,“结构”是类型的一部分,除非你的typedef它。