多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 结构和指针 > 原文: [https://www.programiz.com/c-programming/c-structures-pointers](https://www.programiz.com/c-programming/c-structures-pointers) #### 在本教程中,您将学习在 C 编程中使用指针访问结构的成员。 您还将学习动态分配结构类型的内存。 在了解如何将指针与结构一起使用之前,请务必阅读以下教程: * [C 指针](/c-programming/c-pointers "C Pointers") * [C 结构](/c-programming/c-structures "C structs") * * * ## C 指向结构的指针 这是创建结构指针的方法。 ```c struct name { member1; member2; . . }; int main() { struct name *ptr, Harry; } ``` 这里,`ptr`是指向`struct`的指针。 * * * ## 示例:使用指针访问成员 要使用指针访问结构的成员,我们使用`->`运算符。 ```c #include <stdio.h> struct person { int age; float weight; }; int main() { struct person *personPtr, person1; personPtr = &person1; printf("Enter age: "); scanf("%d", &personPtr->age); printf("Enter weight: "); scanf("%f", &personPtr->weight); printf("Displaying:\n"); printf("Age: %d\n", personPtr->age); printf("weight: %f", personPtr->weight); return 0; } ``` 在此示例中,使用`personPtr = &person1;`将`person1`的地址存储在`personPtr`指针中。 现在,您可以使用`personPtr`指针访问`person1`的成员。 顺便说说, * `personPtr->age`等同于`(*personPtr).age` * `personPtr->weight`等同于`(*personPtr).weight` * * * ## 结构的动态内存分配 在继续本节之前,建议您检查 [C 动态内存分配](https://www.programiz.com/c-programming/c-dynamic-memory-allocation)。 有时,您声明的结构变量的数量可能不足。 您可能需要在运行时分配内存。 这是您可以在 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("Enter the number of persons: "); scanf("%d", &n); // allocating memory for n numbers of struct person ptr = (struct person*) malloc(n * sizeof(struct person)); for(i = 0; i < n; ++i) { printf("Enter first name and age respectively: "); // To access members of 1st struct person, // ptr->name and ptr->age is used // To access members of 2nd struct person, // (ptr+1)->name and (ptr+1)->age is used scanf("%s %d", (ptr+i)->name, &(ptr+i)->age); } printf("Displaying Information:\n"); for(i = 0; i < n; ++i) printf("Name: %s\tAge: %d\n", (ptr+i)->name, (ptr+i)->age); return 0; } ``` 运行该程序时,输出为: ```c Enter the number of persons: 2 Enter first name and age respectively: Harry 24 Enter first name and age respectively: Gary 32 Displaying Information: Name: Harry Age: 24 Name: Gary Age: 32 ``` 在上面的示例中,创建了`n`个结构变量,其中用户输入了`n`。 为了为`struct person`的`n`个分配内存,我们使用了, ```c ptr = (struct person*) malloc(n * sizeof(struct person)); ``` 然后,我们使用`ptr`指针访问`person`的元素。