C 语言编程教程

C 语言 - 首页

C 语言基础

C 语言 - 概述 C 语言 - 特性 C 语言 - 发展历史 C 语言 - 环境设置 C 语言 - 程序结构 C 语言 - Hello World C - 编译过程 C - 注释 C - 标记 C - 关键字 C - 标识符 C - 用户输入 C - 基本语法 C - 数据类型 C - 变量 C - 整数提升 C - 类型转换 C - 类型转换 C - 布尔值

C 语言中的常量和文字

C - 常量 C - 字面量 C - 转义序列 C - 格式说明符

C 语言中的运算符

C - 运算符 C - 算术运算符 C - 关系运算符 C - 逻辑运算符 C - 位运算符 C - 赋值运算符 C - 一元运算符 C - 递增和递减运算符 C - 三元运算符 C - sizeof 运算符 C - 运算符优先级 C - 其他运算符

C 语言中的决策

C - 决策 C - if 语句 C - if...else 语句 C - 嵌套 if 语句 C - switch 语句 C - 嵌套 switch 语句

C 语言中的循环

C - 循环 C - While 循环 C - For 循环 C - Do...while 循环 C - 嵌套循环 C - 无限循环 C - Break 语句 C - Continue 语句 C - goto 语句

C 语言中的函数

C - 函数 C - Main 函数 C - 按值调用函数 C - 按引用调用函数 C - 嵌套函数 C - 可变参数函数 C - 用户定义函数 C - 回调函数 C - return 语句 C - 递归

C 语言中的作用域规则

C - 作用域规则 C - 静态变量 C - 全局变量

C 语言中的数组

C - 数组 C - 数组的属性 C - 多维数组 C - 将数组传递给函数 C - 从函数返回数组 C - 可变长度数组

C 语言中的指针

C - 指针 C - 指针和数组 C - 指针的应用 C - 指针运算 C - 指针数组 C - 指向指针的指针 C - 将指针传递给函数 C - 从函数返回指针 C - 函数指针 C - 指向数组的指针 C - 指向结构体的指针 C - 指针链 C - 指针 vs 数组 C - 字符指针和函数 C - NULL 指针 C - void 指针 C - 悬垂指针 C - 解引用指针 C - Near、Far 和 Huge 指针 C - 指针数组的初始化 C - 指针与多维数组

C 语言中的字符串

C - 字符串 C - 字符串数组 C - 特殊字符

C 语言的结构体和联合

C - 结构体 C - 结构体和函数 C - 结构体数组 C - 自引用结构 C - 查找表 C - 点 (.) 运算符 C - 枚举(或 enum) C - 结构填充和打包 C - 嵌套结构 C - 匿名结构和联合 C - 联合 C - Bit 位字段 C - Typedef

C 语言中的文件处理

C - 输入和输出 C - 文件 I/O(文件处理)

C 语言中的预处理器

C - 预处理器 C - #pragma 编译指示 C - 预处理器操作符 C - 宏 C - 头文件

C 语言中的内存管理

C - 内存管理 C - 内存地址 C - 存储类

C 其他主题

C - 错误处理 C - 可变参数 C - 命令执行 C - 数学函数 C - static 静态关键字 C - 随机数生成 C - 命令行参数

C 语言编程资源

C语言问题与解答答案 C语言快速指南 C语言速查表 C语言实用资源 C语言讨论


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

我们将在下一章学习自指结构。