在本教程中,您將學(xué)習(xí)在C語言編程中使用指針訪問結(jié)構(gòu)的成員。您還將學(xué)習(xí)動(dòng)態(tài)分配結(jié)構(gòu)類型的內(nèi)存。
在了解如何將指針與結(jié)構(gòu)一起使用之前,請(qǐng)務(wù)必閱讀以下教程:
這是創(chuàng)建結(jié)構(gòu)指針的方法。
struct name { member1; member2; . . }; int main() { struct name *ptr, Harry; }
在這里,ptr是一個(gè)指向struct的指針。
要使用指針訪問結(jié)構(gòu)的成員,我們使用->運(yùn)算符。
#include <stdio.h> struct person { int age; float weight; }; int main() { struct person *personPtr, person1; personPtr = &person1; printf("輸入年齡: "); scanf("%d", &personPtr->age); printf("輸入體重: "); scanf("%f", &personPtr->weight); printf("顯示:\n"); printf("年齡: %d\n", personPtr->age); printf("體重: %f", personPtr->weight); return 0; }
輸出結(jié)果
輸入年齡: 25 輸入體重: 55 顯示: 年齡: 25 體重: 55.000000
在此示例中,使用personPtr =&person1;將person1的地址存儲(chǔ)在personPtr指針中。
現(xiàn)在,您可以使用personPtr指針訪問person1的成員。
順便說說,
personPtr->age 等同于 (*personPtr).age
personPtr->weight 等同于 (*personPtr).weight
在繼續(xù)本節(jié)之前,建議您檢查C動(dòng)態(tài)內(nèi)存分配。
有時(shí),您聲明的結(jié)構(gòu)變量的數(shù)量可能不足。您可能需要在運(yùn)行時(shí)分配內(nèi)存。這是您可以在C語言編程中實(shí)現(xiàn)此目標(biāo)的方法。
#include <stdio.h> #include <stdlib.h> struct person { int age; float weight; char name[30]; }; int main() { struct person *ptr; int i, n; printf("輸入人數(shù): "); scanf("%d", &n); //為n個(gè)struct person分配內(nèi)存 ptr = (struct person*) malloc(n * sizeof(struct person)); for(i = 0; i < n; ++i) { printf("分別輸入姓名和年齡: "); //要訪問第一個(gè)struct person的成員 //可以使用 ptr->name 和 ptr->age //要訪問第二個(gè)struct person的成員, //使用(ptr + 1)->名稱和(ptr + 1)-> age scanf("%s %d", (ptr+i)->name, &(ptr+i)->age); } printf("顯示信息:\n"); for(i = 0; i < n; ++i) printf("姓名: %s\t年齡: %d\n", (ptr+i)->name, (ptr+i)->age); return 0; }
運(yùn)行該程序時(shí),輸出為:
輸入人數(shù): 2 分別輸入姓名和年齡: Harry 24 分別輸入姓名和年齡: Gary 32 顯示信息: 姓名: Harry 年齡: 24 姓名: Gary 年齡: 32
在上面的實(shí)例中,在用戶輸入n的地方創(chuàng)建了n個(gè)struct變量。
要為n個(gè)struct person分配內(nèi)存,我們使用,
ptr = (struct person*) malloc(n * sizeof(struct person));
然后,我們使用ptr指針訪問person的元素。