是否可以创建嵌套的struct数组?怎么样?

时间:2012-03-30 18:32:14

标签: c arrays struct

我对这段代码的目标是创建一个包含1000个位置的数组,其中包含一个包含int(用作计数器)的结构和一个初始化为100个位置的数组的嵌套结构。我是否正确设计了这个?

同样,我正在尝试实现1000列×100行的二维表,其中这100行每个都有前面提到的int用作计数器/索引变量,每个位置在100行数组中由嵌套结构组成! 这是我到目前为止所得到的:

#define DATA_MAX 1000
#define MAX_CHAR_TIPO_MOV 60
#define MAX_CHAR_DESCRICAO 60
#define MAX_MOVIMENTOS 100
#define BUFFLEN 1024

char buffer[BUFFLEN];

typedef struct{
    int montante;
    int data;
    int periodicidade;
    char tipo[MAX_CHAR_TIPO_MOV];
    char descricao[MAX_CHAR_DESCRICAO];
}sistema;

typedef struct{
int indice;
struct sistema tabela[MAX_MOVIMENTOS]; /* Compiler gives me an error here: array type has incomplete element type */
}movimentos;

movimentos c[DATA_MAX];

/* Function to initialize arrays/structs in order to eliminate junk */


void inicializarfc(movimentos c[])
{
    int i, j;
//percorre o vector estrutura
for(i=0; i<DATA_MAX; i++)
    for(j=0; j<MAX_MOVIMENTOS; j++)
{
    c[i].[j].data = -1;
    c[i].[j].montante = -1;
    c[i].[j].periodicidade = -1;
    memset((c[i].[j].tipo), ' ', sizeof(c[i].[j].tipo));
    memset((c[i].[j].descricao), ' ', sizeof(c[i].[j].descricao));
   }
}

如果确实可以创建我要问的内容,我应该如何访问结构成员? 使用GCC在W7中的Codeblocks 10.05中进行编译。

2 个答案:

答案 0 :(得分:1)

您无需在struct前面使用typedef关键字。

请说:

sistema tabela[MAX_MOVIMENTOS];

要访问成员,只需说:

movimentos m;
/* initialize data */
int x = m.tabela[0].montante; // accesses montante field of tabela[0]

答案 1 :(得分:0)

让我们来看看你的声明:

typedef struct{
   int montante;
   int data;
   int periodicidade;
   char tipo[MAX_CHAR_TIPO_MOV];
   char descricao[MAX_CHAR_DESCRICAO]; 
}sistema;  

typedef struct{ 
   int indice; 
   struct sistema tabela[MAX_MOVIMENTOS];
}movimentos;

问题在于您正在寻找名为struct sistema的类型,但您尚未声明类似的类型;相反,您声明了匿名结构类型并为其创建了 typedef名称 sistema。要访问名为struct sistema的类型,您必须在定义中提供struct标记:

struct sistema { ... };

struct tag sistema和typedef name sistema位于不同的名称空间中;你可以写

typedef struct sistema { ... } sistema;

并且可以互换地使用sistemastruct sistema,尽管这可能会令人困惑。

在这种情况下,最简单的方法是更改​​

struct sistema tabela[MAX_MOVIMENTOS];

sistema tabela[MAX_MOVIMENTOS];

movimentos结构类型中。