C语言中的结构体指针



如果使用关键字struct定义了一个派生数据类型,则可以声明此类型的变量。因此,您还可以声明一个指针变量来存储其地址。指向结构体的指针因此是一个引用结构体变量的变量。

语法:定义和声明结构体

以下是如何使用“struct”关键字定义新的派生数据类型:

struct type {
   type var1;
   type var2;
   type var3;
   ...
   ...
};

然后可以声明此派生数据类型的变量,如下所示:

struct type var;

然后可以声明一个指针变量并存储var的地址。要将变量声明为指针,必须以“*”为前缀;要获取变量的地址,我们使用“&”运算符。

struct type *ptr = &var;

访问结构体的元素

要使用指针访问结构体的元素,我们使用一个称为间接运算符 (→) 的特殊运算符。

在这里,我们定义了一个名为book的用户定义的 struct 类型。我们声明了一个book变量和一个指针。

struct book{
   char title[10];
   double price;
   int pages;
};
struct book b1 = {"Learn C", 675.50, 325},
struct book *strptr;

要存储地址,请使用&运算符。

strptr = &b1;

使用间接运算符

在 C 编程中,我们对 struct 指针使用间接运算符 (“”)。它也称为“struct 解引用运算符”。它有助于访问 struct 指针引用的 struct 变量的元素。

要访问 struct 中的单个元素,间接运算符的使用方法如下:

strptr -> title;
strptr -> price;
strptr -> pages;

struct 指针使用间接运算符或解引用运算符来获取 struct 变量的 struct 元素的值。点运算符 (“.”) 用于根据 struct 变量获取值。因此,

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\n", strptr -> title);
   printf("Price: %lf\n", strptr -> price);
   printf("No of Pages: %d\n", strptr -> pages);

   return 0;
}

输出

Title: Learn C
Price: 675.500000
No of Pages: 325

注意事项

  • 点运算符 (.) 用于通过 struct 变量访问 struct 元素。
  • 要通过其指针访问元素,必须使用间接运算符 (→)。

示例

让我们考虑另一个示例来了解指向结构体的指针是如何工作的。在这里,我们将使用关键字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: \n");
   printf("Name: %s\n", personPtr -> name);
   printf("Age: %d\n", personPtr -> age);
   printf("Weight: %f", personPtr -> weight);
   
   return 0;
}

输出

运行此程序时,将产生以下输出:

Displaying the Data: 
Name: Meena
Age: 40
weight: 60.000000

C 允许您声明“struct 数组”以及“指针数组”。在这里,struct 指针数组中的每个元素都是对 struct 变量的引用。

struct 变量类似于基本类型的普通变量,因为您可以拥有 struct 数组,可以将 struct 变量传递给函数,以及从函数返回 struct。

注意:在声明时,需要在变量或指针名称前加上“struct 类型”。但是,可以通过使用typedef关键字创建简写表示法来避免这种情况。

为什么需要指向结构体的指针?

指向结构体的指针非常重要,因为您可以使用它们来创建复杂的动态数据结构,例如链接列表、树、图等。此类数据结构使用自引用 struct,其中我们定义一个 struct 类型,其中一个元素是指向同一类型的指针。

具有指向其自身类型元素的指针的自引用结构体的示例定义如下:

struct mystruct{
   int a;
   struct mystruct *b;
};

我们将在下一章学习自引用结构体。

广告

© . All rights reserved.