C programmieren, Struktur Member Variable zugreifen mit -> oder .?
Hallo,
ich habe hier ein kleines Beispiel für eine Struktur. Ich verwende den Pfeiloperator um die Member Variabeln zu printen. Meine Frage ist warum printf auch bei der Schreibweise movie_info[0].id = 01; funktioniert.
Ich dachte dass man den Punktoperator (movie_info[0].id) nur dann verwendet wenn es sich um eine normale Struktur handelt (z.b: Movie_info movie_info)
Oder ist es in dem Beispiel egal obman movie_info[0].id oder movie_info->id verwendet? Danke!
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int id;
float net_val;
}Movie_info;
int main()
{
Movie_info *movie_info;
movie_info = (Movie_info*) malloc(sizeof(Movie_info));
printf("Movie Information:\n");
movie_info->id = 01;
movie_info[0].id = 01;
printf("\n ID: %d", movie_info->id);
printf("\n ID: %d", movie_info[0].id);
movie_info[0].net_val = 125.45;
movie_info->net_val = 125.45;
printf("\n NET VALUE: %.1f", movie_info->net_val);
printf("\n NET VALUE: %.1f", movie_info[0].net_val);
return 0;
}
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.