C programmieren, Struktur Member Variable zugreifen mit -> oder .?

1 Antwort

foo->bar ist equivalent zu (*foo).bar. Es handelt sich nur um eine Abkürzung um auf Daten zu zugreifen, welche sich hinter einem Pointer befinden!

foo[0] macht (wenn der Index 0 ist) dasselbe wie *foo. Nachdem [] mit dem Index die Adresse aufgelöst hat, wird der Wert aus dieser Adresse geladen und als Ergebnis des Ausdrucks zurückgegeben (hier zu printf).

#include <stdio.h>

typedef struct Punkt {
  int x;
  int y;
} Punkt;

int main(void) {
  Punkt x = {6, 9};
  Punkt *y = &x;

  printf("%d\n", x.x);
  printf("%p\n\n", (void *)y);

  printf("%d\n", y->x);
  printf("%d\n", (*y).x);
  printf("%d\n", y[0].x);
  printf("%d\n", 0[y].x);

  return 0;
}

.

6
0x7ffcbe65ac80

6
6
6
6

Es ist mehr oder weniger äquivalent, aber ich würde zur Klarheit -> anstelle von [0] verwenden.