在本教程中,您将学习在C语言编程中使用指针访问结构的成员。您还将学习动态分配结构类型的内存。
在了解如何将指针与结构一起使用之前,请务必阅读以下教程:
这是创建结构指针的方法。
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指针中。
现在,您可以使用personPtr指针访问person1的成员。
顺便说说,
personPtr->age 等同于 (*personPtr).age
personPtr->weight 等同于 (*personPtr).weight
在继续本节之前,建议您检查C动态内存分配。
有时,您声明的结构变量的数量可能不足。您可能需要在运行时分配内存。这是您可以在C语言编程中实现此目标的方法。
#include <stdio.h> #include <stdlib.h> struct person { int age; float weight; char name[30]; }; int main() { struct person *ptr; int i, n; printf("输入人数: "); 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; }
运行该程序时,输出为:
输入人数: 2 分别输入姓名和年龄: Harry 24 分别输入姓名和年龄: Gary 32 显示信息: 姓名: Harry 年龄: 24 姓名: Gary 年龄: 32
在上面的实例中,在用户输入n的地方创建了n个struct变量。
要为n个struct person分配内存,我们使用,
ptr = (struct person*) malloc(n * sizeof(struct person));
然后,我们使用ptr指针访问person的元素。