Forskjell i erklærte strukturer

stemmer
2

Jeg brukte min struktur som dette. Jeg liker ikke å typedef som jeg har fortalt det kan skjule feil. Men jeg var ute på noen eksempelkode og jeg har sett strukturer erklært som dette. Og dette er den vanlige måten jeg erklære dem.

struct person
{
     int age;
     char name[32];
};

hjelp som dette:

    struct person person_a;
    person_a.age = 20;
    etc.

Men jeg har sett strukturer erklært som dette:

struct 
{
     int age;
     char name[32];
}person;

og

struct _person
{
     int age;
     char name[32];
}person;

Hva er forskjellen mellom alle disse forskjellige teknikker, og hvordan ville du bestemmer når det er best å bruke hver enkelt en.

Mange takk for alle forslag,

Publisert på 11/06/2009 klokken 04:01
kilden bruker
På andre språk...                            


6 svar

stemmer
17

Dette:

struct 
{
    int age;
    char name[32];
}person;

erklærer en variabel personsom er en struct. Den structhar ikke noe navn, men du fortsatt bruke personvariabel på samme måte.

struct _person
{
    int age;
    char name[32];
}person;

Dette er identisk med:

struct _person
{
    int age;
    char name[32];
};
struct _person person;

Det sier en structsom heter _person, og deretter gjør en variabel kalt personav type struct _person.

Svarte 11/06/2009 kl. 04:05
kilden bruker

stemmer
2

For det første tilfellet (av andre eksempel), vil du bruke denne fremgangsmåten hvis du er sikker på at du trenger et annet objekt for denne strukturen. Dette ser rent og er rask til å kode :)

For det andre tilfellet har du en klar objekt kalt 'person' og en mulighet til å lage et objekt senere som

 struct _person object2

Dette er for å forklare hvorfor du vil bruke enten tilnærming. Forskjellen mellom dem er godt forklart ovenfor.

Svarte 11/06/2009 kl. 07:02
kilden bruker

stemmer
2

I begge de siste to strukturer, har du tildelt lagringsplass for struktur kalt person.

Det jeg mener er hvis du har noe sånt som dette:

struct person
{
     int age;
     char name[32];
};

Det er bare en erklæring; ingen variabel fordeling er der, og derfor ikke kan brukes på innsiden av koden. Du kan begynne å bruke denne strukturen etter at du har erklært som følger:

struct person p1;

Deretter kan p1 utnyttes p1.age eller p1.name, etc.

I forhold til den virkelige verden kode, i stedet for

struct _person
{
     int age;
     char name[32];
}person;

vi vanligvis ser

typedef struct _person
{
     int age;
     char name[32];
} person_t;

I dette tilfellet kan vi spare skrive og enda viktigere strukturen oppfører seg som alle andre innebygde typen som int, etc. For eksempel,

person_t p1;

person_t * p1;

Og så videre.

Svarte 11/06/2009 kl. 04:16
kilden bruker

stemmer
1

Hvis formålet med struktur definisjon er å erklære en logisk datastruktur som har betydning utenfor den lokale modulen, så ville du forvente å se den første konstruere i en header fil.

I virkelighetens verden C-kode, er strukturer ofte erklært for Purley pragmatiske grunner som er lokale i omfang. For eksempel, formatering av data som skal kopieres inn i en buffer. I disse tilfellene er det veldig praktisk og logisk å fusjonere strukturen type og variabeldeklarasjon. Også ved hjelp av en anoymous erklæring for strukturtypen unngår rot på navne med et navn som ikke er nødvendig.

Jeg har en policy av disse eksemplene: i C, blir navnene med en ledende understreking anses å være reservert for kompilatoren leverandører av konvensjonen. Så jeg tror ikke det siste eksempelet er i samsvar med beste praksis.

Svarte 11/06/2009 kl. 04:11
kilden bruker

stemmer
1

Den første kode skaper akkurat den personen struct.
Den andre kode oppretter en forekomst av person struct kalt person_a.
Den tredje kode oppretter en ikke navngitt struct og en forekomst av det som kalles person. Den fjerde kode oppretter en struct heter _person og en forekomst av den navngitt person.

Svarte 11/06/2009 kl. 04:08
kilden bruker

stemmer
1

Det finnes ingen magisk det egentlig,

struct person
{
     int age;
     char name[32];
} var;

er det samme som:

struct person
{
     int age;
     char name[32];
};
struct person var;
Svarte 11/06/2009 kl. 04:07
kilden bruker

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