Hva er forskjellen når du bruker typdef når erklære en struct?

stemmer
1

Mulige duplikater:
Hvorfor skal vi typedef en struct så ofte i C?
Forskjellen mellom 'struct' og 'typedef struct' i C ++?

Hva er forskjellen mellom følgende type erklæringer?

struct Person
{
    int age;
};


typedef struct 
{
    int age;
}Person;

jeg forstår det

struct 
{
    int age;
}Person;

Skaper og forekomst av en navngitt struct heter person, der

struct Person
{
    int age;
};

erklærer en type som heter person, men ikke en forekomst. Men jeg fortsatt ikke får hva typedef gjør.

Publisert på 22/07/2009 klokken 17:06
kilden bruker
På andre språk...                            


6 svar

stemmer
4

Jeg tror det er det samme som i C, skaper typedef et alias av en type ... i ditt første tilfellet navnet på typen er " struct Person", mens i det andre tilfellet er bare " Person".

Vanligvis, når du har til å erklære selv Klassifisering strukturer (som lister), bruker dere begge, fordi typedef ikke har kraft før strukturen er definert (med mindre du gjør en frem erklæring), for eksempel:

typedef struct node {
    void *data;
    struct node *next;
} TNode, *PTNode;

så nå kan du deklarere variabler av samme type på følgende måter:

struct node *node1;
TNode *node2;
PTNode node3;

de tre variablene ovenfor er de samme, pekere til nettverksstrukturen.

Svarte 22/07/2009 kl. 17:08
kilden bruker

stemmer
2

I C, structs lever i sitt eget navn plass, så du må skrive struct Personom du ønsker å bruke struct typenavnet. Det typedefeliminerer behovet for at prefiks.

I C ++, structs bor i samme navneområdet som alt annet, så det er ingen grunn til å gjøre dette. Det er vanligvis sett på som en unødvendig C-isme.

Svarte 22/07/2009 kl. 17:13
kilden bruker

stemmer
2

Bruk av typedefs for structs i C er forklart her . (i C ++, structs er bare klasser med medlemmer som er offentlige som standard, mens klassen er private som standard)

Svarte 22/07/2009 kl. 17:11
kilden bruker

stemmer
0

I C ++ typedefs er synonymer for andre typer mer enn forskjellige typer. De er vanligvis brukes til to formål:

  • Opprette bærbar koden der du abstrakt plattformen spesifikke unna. På en plattform kan du ha typedef int int32og på en annen plattform typedef long int32. Du ville bruke int32hele koden din, og når porting til en ny plattform vil du bare nødt til å endre typedefs som passer dine behov.

  • Opprette aliaser for svært kompliserte typer. Eg typedef char const* const* cppchar. I stedet for å skrive char const* const*i koden din kan du nå skrive cppchar.

Svarte 22/07/2009 kl. 17:18
kilden bruker

stemmer
0

du kan fortelle forskjellen når du passerer Person eller struct Person til en funksjon

Hvis du har definert

struct Person { ... };

Du bør gi det til en funksjon som uttrykkelig sier at det er en struct

void foo(struct Person person) { ... }

På den annen side, hvis du har definert

typedef struct Person { ... };

Du må ikke si at det er en struct, siden søkeordet typedef kan du faktisk definere en datatype, i dette tilfellet Person og du passerer det på denne måten

void foo(Person person) { ... }

ganske mye som alle andre datatype

Håper dette hjelper

Svarte 22/07/2009 kl. 17:14
kilden bruker

stemmer
0

c-kompatibilitet i hovedsak samme i C ++, er det for eldre c-kode

ikke sikker på om å henvise til statiske funksjoner og typedefs i den ikke navngitte struct når du gjør definisjonen på denne måten - jeg aldri gjøre.

Svarte 22/07/2009 kl. 17:11
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more