我在gcc(x64)上編譯了下面的代碼。使用指針訪問結構的成員
爲什麼我可以通過放置點(people [0] .name)而不是' - >'來訪問結構項?
是不是人[0]指向結構的地址,我應該使用people [0] - > name或(* people [0])。name來訪問該名稱?
代碼:
#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;
}
輸出:
sizeof(people)=8
people[0].name=Henry
sizeof(people[0])=16
people[1].name=Jacob
sizeof(people[1])=16
您已切換的參數在調用['calloc'](http://en.cppreference.com/ W/C /存儲器/釋放calloc)。 –
是不是calloc只返回指向分配內存中最低字節的指針? – graceshirts
您使用'strncpy()'是危險的。 (好,*每使用strncpy()都是危險的......) – wildplasser