C 语言中指向结构的指针
如果您使用关键字 struct 定义了派生数据类型,则可以声明一个该类型的变量。因此,您也可以声明一个指针变量来存储其地址。因此,指向结构的指针是指向结构体变量的变量。
语法:定义和声明结构体
以下是使用"struct"关键字定义新的派生数据类型的方法 -
struct type { type var1; type var2; type var3; ... ... };
然后,您可以声明一个此派生数据类型的变量,如下所示:-
struct type var;
然后,您可以声明一个指针变量并存储var的地址。要将变量声明为指针,必须在其前加上"*"前缀;要获取变量的地址,我们使用"&"运算符。
struct type *ptr = &var;
访问结构体的元素
要使用指针访问结构体的元素,我们使用一个称为间接寻址运算符 ()的特殊运算符。
这里,我们定义了一个名为 book 的用户定义结构体类型。我们声明了一个 book 变量和一个指针。
struct book{ char title[10]; double price; int pages; }; struct book b1 = {"Learn C", 675.50, 325}, struct book *strptr;
要存储地址,请使用 & 运算符。
strptr = &b1;
使用间接运算符
在 C 语言编程中,我们将间接运算符 ("") 与结构体指针一起使用。它也被称为"结构体解引用运算符"。它有助于访问指针所引用的结构体变量的元素。
要访问结构体中的单个元素,间接运算符的使用方式如下:
strptr -> title; strptr -> price; strptr -> pages;
结构体指针使用间接寻址运算符或解引用运算符来获取结构体变量中结构体元素的值。点运算符 (".") 用于获取引用结构体变量的值。因此,
b1.title is the same as strpr -> title b1.price is the same as strptr -> price b1.pages is the same as strptr -> pages
示例:指向结构体的指针
以下程序展示了指向结构体的指针的用法。在本例中,"strptr"是指向变量"struct book b1"的指针。因此,"strrptr title"返回书名,类似于"b1.title"。
#include <stdio.h> #include <string.h> struct book{ char title[10]; double price; int pages; }; int main(){ struct book b1 = {"Learn C", 675.50, 325}; struct book *strptr; strptr = &b1; printf("Title: %s ", strptr -> title); printf("Price: %lf ", strptr -> price); printf("No of Pages: %d ", strptr -> pages); return 0; }
输出
Title: Learn C Price: 675.500000 No of Pages: 325
注意事项
- 点运算符 (.) 用于通过结构体变量访问结构体元素。
- 要通过结构体指针访问元素,必须使用间接运算符 ()。
示例
让我们考虑另一个示例,以了解指向结构体的指针的实际工作原理。在这里,我们将使用关键字 struct 定义一个名为 person 的新派生数据类型,然后声明一个与其类型相同的变量和一个指针。
要求用户输入人员的姓名、年龄和体重。通过使用间接运算符访问这些值,这些值将存储在结构体元素中。
#include <stdio.h> #include <string.h> struct person{ char *name; int age; float weight; }; int main(){ struct person *personPtr, person1; strcpy(person1.name, "Meena"); person1.age = 40; person1.weight = 60; personPtr = &person1; printf("Displaying the Data: "); printf("Name: %s ", personPtr -> name); printf("Age: %d ", personPtr -> age); printf("Weight: %f", personPtr -> weight); return 0; }
输出
运行该程序时,它将产生以下输出 -
Displaying the Data: Name: Meena Age: 40 weight: 60.000000
C 语言允许声明"结构体数组"和"指针数组"。结构体指针数组中的每个元素都是对结构体变量的引用。
结构体变量类似于普通的主类型变量,您可以拥有一个结构体数组,可以将结构体变量传递给函数,也可以从函数返回一个结构体。
注意:声明时,需要在变量或指针的名称前添加"结构体类型"前缀。但是,您可以使用 typedef 关键字创建简写符号来避免这种情况。
为什么需要指向结构的指针?
指向结构的指针非常重要,因为您可以使用它们来创建复杂且动态的数据结构,例如链表、树、图等。此类数据结构使用自引用结构,其中我们定义一个结构类型,其元素之一作为指向同一类型的指针。
以下是一个自引用结构的示例,其指针指向其自身类型的元素 -
struct mystruct{ int a; struct mystruct *b; };
我们将在下一章学习自指结构。