it-swarm.com.de

Typedef/struct-Deklarationen

Was ist der Unterschied zwischen diesen beiden Erklärungen, wenn sich jemand im Detail erklären könnte:

typedef struct atom {
  int element;
  struct atom *next;
};

und

typedef struct {
  int element;
  struct atom *next;
} atom;
12
user2780061

Der Zweck von typedef ist es, einer Typspezifikation einen Namen zu geben. Die Syntax lautet:

typedef <specification> <name>;

Nachdem Sie das getan haben, können Sie <name> ähnlich wie die eingebauten Typen der Sprache verwenden, um Variablen zu deklarieren.

In Ihrem ersten Beispiel ist <specification> alles, was mit struct atom beginnt, aber es folgt kein <name>. Sie haben der Typspezifikation also keinen neuen Namen gegeben.

Die Verwendung eines Namens in einer struct-Deklaration ist nicht identisch mit der Definition eines neuen Typs. Wenn Sie diesen Namen verwenden möchten, müssen Sie ihm immer das Schlüsselwort struct voranstellen. Wenn Sie also erklären:

struct atom {
    ...
};

Sie können neue Variablen mit deklarieren:

struct atom my_atom;

aber du kannst es nicht einfach erklären

atom my_atom;

Für letzteres müssen Sie typedef verwenden.

Beachten Sie, dass dies einer der bemerkenswerten Unterschiede zwischen C und C++ ist. In C++ kann eine Deklaration von struct oder class type does in Variablendeklarationen verwendet werden. Sie benötigen keine typedef. typedef ist in C++ weiterhin für andere komplexe Typkonstrukte wie Funktionszeiger nützlich.

Sie sollten sich wahrscheinlich einige der Fragen in der Seitenleiste Related ansehen, die andere Nuancen dieses Themas erklären.

12
Barmar

Dies ist normal structure declaration 

  struct atom {
      int element;
      struct atom *next;
    };    //just declaration

erstellung von object

 struct atom object; 

  struct atom {
      int element;
      struct atom *next;
    }object;    //creation of object along with structure declaration

Und

Dies ist die Typdefinition des Typs struct atom 

typedef  struct atom {
  int element;
  struct atom *next;
}atom_t;  //creating new type

Hier ist atom_t ein Alias ​​für struct atom 

objekt erstellen

atom_t object;      
struct atom object; //both the ways are allowed and same
14
Gangadhar

Die allgemeine Syntax des typedef-Schlüsselworts lautet: typedef existing_data_type new_data_type;

typedef struct Record {
    char ename[30];
     int ssn;
    int deptno;
} employee;
0
Deep