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