我对这段代码的目标是创建一个包含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中进行编译。
答案 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;
并且可以互换地使用sistema
和struct sistema
,尽管这可能会令人困惑。
在这种情况下,最简单的方法是更改
struct sistema tabela[MAX_MOVIMENTOS];
到
sistema tabela[MAX_MOVIMENTOS];
在movimentos
结构类型中。