跳到主要内容

C 语言结构体和指针

提示
  1. 结构体指针基础:在C语言中,可以创建指向结构体的指针,例如 struct name *ptr,来指向struct类型。
  2. 通过指针访问结构体成员:使用->操作符通过结构体指针访问其成员,如personPtr->age访问年龄。
  3. 动态内存分配:可使用malloc函数动态分配结构体数组的内存,然后通过指针访问和操作这些结构体,如ptr = (struct person*) malloc(n * sizeof(struct person));

在您学习如何将指针与结构体一起使用之前,请确保查看以下教程:

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;
}

在这个示例中,person1的地址被存储在personPtr指针中,使用personPtr = &person1;

现在,您可以使用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个结构体person分配内存
ptr = (struct person*) malloc(n * sizeof(struct person));

for(i = 0; i < n; ++i)
{
printf("分别输入名字和年龄: ");

// 访问第1个结构体person的成员,
// 使用ptr->name和ptr->age

// 访问第2个结构体person的成员,
// 使用(ptr+1)->name和(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由用户输入。

为了为n个结构体person分配内存,我们使用了,

ptr = (struct person*) malloc(n * sizeof(struct person));

然后,我们使用ptr指针访问person的元素。