Декларация структуры в C - PullRequest
1 голос
/ 05 августа 2011

Правильно ли следующее объявление структуры.

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

Когда мне это нравится, компилятор не выдает никаких ошибок. Но когда я назначаю class[0].age=10,
Я получаю ошибку. Итак, здесь class [0] struct переменная или имя структуры ..

Спасибо

Ответы [ 4 ]

6 голосов
/ 05 августа 2011

Вы определяете тип class, который представляет собой массив из десяти структур. Чтобы использовать этот тип, вы должны установить переменную этого типа:

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 голосов
/ 05 августа 2011

Я думаю, что вы хотите сделать

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

В вашем текущем коде класс определен как тип из-за typedef. Это нормально для определения типов таким образом, но вы должны объявить переменную впоследствии:

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

class_type class;
0 голосов
/ 05 августа 2011

class - это имя типа массива из 10 элементов, каждый из которых соответствует структуре, которую вы определяете.

Вам следует создать экземпляр типа:

class classObject;

Возможно, вас вводят в заблуждениев соответствии с базовым синтаксисом объявления структуры:

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

это объявление также определит переменную, массив 10 struct class.

Префикс ее с typedef вы изменяетеспособ объявления и определения вместо имени типа вместо экземпляра структуры.

0 голосов
/ 05 августа 2011

Делая этот typedef, вы определяете тип.Поэтому, чтобы получить желаемый эффект, вы должны сделать следующее:

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