在本教程中,您將學(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的元素。