📜  结构指针(1)

📅  最后修改于: 2023-12-03 15:11:38.634000             🧑  作者: Mango

结构指针

在 C 语言中,结构体和指针是两个非常重要的概念。结构指针是指一个指向结构体变量的指针。

定义结构体

首先,我们需要定义一个结构体。结构体是一个用户自定义的数据类型,它由多个不同类型的成员组成。我们可以通过以下方式定义一个结构体:

struct student {
    char name[20];
    int age;
    float gpa;
};

上面的代码定义了一个名为 student 的结构体,它有三个成员:nameagegpa。其中,name 是一个字符数组,用于存储学生的名字,age 是一个整数,用于存储学生的年龄,gpa 是一个浮点数,用于存储学生的平均成绩。

声明结构指针

一旦我们定义了一个结构体,就可以声明一个指向该结构体的指针。我们可以通过以下方式声明一个结构指针:

struct student *ptr;

这里声明了一个名为 ptr 的指针,它指向一个 student 类型的结构体变量。注意,指针的类型需要和结构体的类型一致。

使用结构指针访问结构体成员

有了结构指针之后,我们就可以通过指针来访问结构体成员。有两种访问结构体成员的方式:

通过 . 运算符访问结构体成员

我们可以通过 . 运算符来访问结构体成员,例如:

struct student s = {"Tom", 18, 3.8};
struct student *ptr = &s;
printf("name: %s\n", ptr->name);
printf("age: %d\n", ptr->age);
printf("gpa: %f\n", ptr->gpa);

上面的代码首先定义了一个名为 s 的结构体变量,并初始化了它的成员。然后,定义了一个指向 s 的指针 ptr,最后通过指针来访问结构体成员。

通过 -> 运算符访问结构体成员

另外一种访问结构体成员的方式是使用 -> 运算符,例如:

struct student *ptr = (struct student *)malloc(sizeof(struct student));
strcpy(ptr->name, "Jerry");
ptr->age = 19;
ptr->gpa = 3.5;
printf("name: %s\n", ptr->name);
printf("age: %d\n", ptr->age);
printf("gpa: %f\n", ptr->gpa);

上面的代码首先使用 malloc() 函数动态分配了一个 student 类型的结构体变量,并将指针赋给了 ptr。然后,使用 -> 运算符来访问结构体成员,并最后释放了动态分配的内存。

总结

结构指针是一种非常重要的 C 语言概念,可以通过指针来访问结构体成员。在实际编程中,我们会用到大量的结构体和结构指针,因此对于结构指针的理解是非常必要的。