Ich kompilierte den folgenden Code auf gcc (x64).Zugreifen auf Mitglied der Struktur mit Zeiger
Warum kann ich auf die Strukturelemente zugreifen, indem ich dot (people [0] .name) anstelle von '->' drücke?
Nicht Leute [0] verweist auf die Adresse der Struktur und ich sollte Leute [0] -> name oder (* people [0]) verwenden, um auf den Namen zuzugreifen?
Code:
#include <stdio.h>
#define TOTAL 4
int main(void) {
typedef struct tagPerson {
char name[12];
int ID;
} Person;
#define LPPERSON Person*
Person * people = calloc(sizeof(Person), TOTAL);
strncpy(people[0].name, "Henry", 12);
strncpy(people[1].name, "Jacob", 12);
printf("sizeof(people)=%d\n", sizeof(people));
printf("people[0].name=%s\n", people[0].name);
printf("sizeof(people[0])=%d\n", sizeof(people[0]));
printf("people[1].name=%s\n", people[1].name);
printf("sizeof(people[1])=%d\n", sizeof(people[1]));
free(people);
return 0;
}
Ausgang:
sizeof(people)=8
people[0].name=Henry
sizeof(people[0])=16
people[1].name=Jacob
sizeof(people[1])=16
Sie haben die Argumente im Aufruf von [ 'calloc'] geschaltet (http://en.cppreference.com/ w/c/speicher/calloc). –
Gibt Calloc nicht nur einen Zeiger auf das niedrigste Byte im zugewiesenen Speicher zurück? – graceshirts
Ihre Verwendung von 'strncpy()' ist gefährlich. (Nun, * jede * Verwendung von strncpy() ist gefährlich ...) – wildplasser