Unterschied zwischen -> und . in einer Struktur?

Lesezeit: 2 Minuten

Wenn ich eine Struktur wie

struct account {
   int account_number;
};

Was ist dann der Unterschied zwischen tun

myAccount.account_number;

und

myAccount->account_number;

oder gibt es da keinen unterschied?

Wenn es keinen Unterschied gibt, warum würden Sie nicht einfach die verwenden . Notation statt ->? -> sieht so chaotisch aus.

-> ist eine Abkürzung für (*x).fieldwo x ist ein Zeiger auf eine Variable vom Typ struct accountund field ist ein Feld in der Struktur, wie z account_number.

Wenn Sie einen Zeiger auf eine Struktur haben, dann sagen Sie

accountp->account_number;

ist viel prägnanter als

(*accountp).account_number;

Sie nutzen . wenn es um Variablen geht. Sie nutzen -> wenn es um Zeiger geht.

Zum Beispiel:

struct account {
   int account_number;
};

Deklarieren Sie eine neue Variable vom Typ struct account:

struct account s;
...
// initializing the variable
s.account_number = 1;

Erklären a als Hinweis auf struct account:

struct account *a;
...
// initializing the variable
a = &some_account;  // point the pointer to some_account
a->account_number = 1; // modifying the value of account_number

Verwenden a->account_number = 1; ist eine alternative Syntax für (*a).account_number = 1;

Ich hoffe das hilft.

Je nachdem, ob die linke Seite ein Objekt oder ein Zeiger ist, verwenden Sie die unterschiedliche Notation.

// correct:
struct account myAccount;
myAccount.account_number;

// also correct:
struct account* pMyAccount;
pMyAccount->account_number;

// also, also correct
(*pMyAccount).account_number;

// incorrect:
myAccount->account_number;
pMyAccount.account_number;

-> ist eine Zeigerdereferenzierung und . Accessor kombiniert

Wenn myAccount ein Zeiger ist, verwenden Sie diese Syntax:

myAccount->account_number;

Wenn dies nicht der Fall ist, verwenden Sie stattdessen dieses:

myAccount.account_number;

Benutzer-Avatar
teja

ja kannst du verwenden Strukturmitglieder in beide Richtungen…

man ist mit DOt:(” . “)

myAccount.account_number;

ein anderer ist:(” -> “)

(&myAccount)->account_number;

Benutzer-Avatar
Besondere

printf("Book title: %s\n", book->subject);
printf("Book code: %d\n", (*book).book_code);

  • Sie sollten Ihre Antwort begründen.

    – Carlos López Mari

    8. Oktober 2019 um 8:35 Uhr

1366420cookie-checkUnterschied zwischen -> und . in einer Struktur?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy