C 结构体和指针
C 结构体和指针
在本教程中,您将学习在 C 编程中使用指针来访问结构的成员。您还将学习动态分配结构类型的内存。
在了解指针如何与结构一起使用之前,请务必查看以下教程:
- C 指针
- C 结构
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("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;
}
在本例中,person1 的地址 存储在 personPtr 使用 personPtr = &person1;
的指针 .
现在,您可以访问 person1 的成员了 使用 personPtr
指针。
顺便说一句,
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("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;
}
当你运行程序时,输出将是:
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 处创建的结构变量的数量 由用户输入。
为 n 分配内存 结构人的数量 ,我们用过,
ptr = (struct person*) malloc(n * sizeof(struct person));
然后,我们使用 ptr person 的访问元素的指针 .
C语言