1

なので、この2つの違いを知りたいです。

struct Record {
    int ID,
    char *name
}Student;


typedef struct Record {
    int ID,
    char *name
}Student;

最初の Student は構造体変数であることを知っています。しかし、2 番目の Student は変数ですか、それとも単なる型名ですか?

4

2 に答える 2

3
typedef struct Record { ... } Student;

struct Recordこれにより、という名前の typedef とともに新しい型が作成されStudentます。Studentのエイリアスですstruct Record。これらは同一の変数宣言になります。

struct Record studentRecord;
Student studentRecord;

struct通常、変数を宣言するときにキーワードを削除できるように、typedef は構造体と同じ名前になります。

typedef struct Record { ... } Record;

Record record;   // Don't need to write "struct Record".
于 2013-08-29T21:33:36.893 に答える
2

2 番目の例のtypedef,Studentは型名です。

を使用すると、キーワードが削除されtypedefた場合に変数の名前が表示される場所に型の名前が表示されます。typedef

        int var_name;
typedef int type_name;

        struct SomeType { ... } some_var;
typedef struct SomeType { ... } SomeType;

C では、typedef名前は別の型名のエイリアスであり、新しい型そのものではないことに注意してください。名前と同時に構造体型を定義する場合typedef、正式な規則は型が定義されているstruct SomeType { ... }ことです (たとえば、型名がその型にエイリアスされる前に (たとえば によってtypedef struct SomeType { ... } SomeType;))。

于 2013-08-29T21:32:50.130 に答える