2011-08-05 216 views
1

下面的结构声明是否正确。C中的结构声明

typedef struct { 
int roll; 
int age ; 
} class[10]; 

当我这样做时,编译器不会说任何错误。 但是,当我分配class[0].age=10,
我得到错误。所以在这里类[0]结构变量或结构名..

感谢

回答

6

要定义class这是十层结构数组。使用这种类型的,你必须instatiate该类型的变量:

class x; 
x[0].age = 10; 

也许稍微清洁的方式将有两个单独的类型定义:

typedef struct { int roll; int age; } foo_unit; 
typedef foo_unit foo_array[10]; 

foo_array x;  /* now an array of 10 foo_units. */ 
foo_unit y[10]; /* same thing */ 
3

我想你想要做的是

struct { 
    int roll; 
    int age ; 
} class[10]; 

在当前的代码,类定义为一个类型,因为的typedef。它的优良定义类型的这种方式,但你必须在事后声明一个变量:

typedef struct { 
    int roll; 
    int age ; 
} class_type[10]; 

class_type class; 
0

通过进行此类型定义,你定义一个类型。因此,为了得到你想要的效果,你应该做到以下几点:

class myclass; 
    myclass[0].age = 1; 
0

class是10个元素等同于你定义结构数组的类型名称。

你应该实例化类型:

class classObject; 

你在可能由基本语法声明一个结构误导:

struct class { 
    int roll; 
    int age ; 
} class[10]; 

此声明还将定义一个变量,数组的10 struct class

通过在typedef前加上前缀,您正在改变声明的工作方式,并且定义类型名称而不是结构实例。