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 语言中的点 (.) 运算符

C 语言中的点 (.) 运算符

C 语言中的点 (.) 运算符也称为"方向选择成员"。它用于选择结构体和联合体的成员。 点 (.) 运算符是一个二元运算符,它需要两个操作数(结构或联合名称和成员名称),并且具有最高的运算符优先级

当您想要访问和操作结构和联合的成员(变量)时,点 (.) 运算符非常有用。

使用点 (.) 运算符

点 (.) 运算符使用结构和联合变量名称来选择结构和联合的成员。以下是使用点 (.) 运算符访问结构体或联合体成员的语法 -

var.member;

其中,var 是某个结构体或联合体类型的变量,member 是创建结构体或联合体时定义的元素之一。

示例

使用 struct 关键字定义一个新的派生数据类型,语法如下 -

struct newtype {
   type elem1;
   type elem2;
   type elem3;
   ...
   ...
};

然后,您可以将此派生数据类型的变量声明为 -

struct newtype var;

要访问某个成员,

var.elem1;

结构体 (struct) 的点运算符

如上所述,点 (.) 运算符用于访问和操作结构体的成员。

示例

让我们声明一个名为 book 的结构体类型和一个结构体变量。以下示例显示如何使用点运算符 (.) 访问 book 结构体中的成员。

查看示例 -

#include <stdio.h>

struct book {
   char title[10];
   double price;
   int pages;
};

int main (){

   struct book b1 = {"Learn C", 675.50, 325};
   
   printf("Title: %s
", b1.title);
   printf("Price: %lf
", b1.price);
   printf("No of Pages: %d
", b1.pages);
   printf("size of book struct: %d", sizeof(struct book));

   return 0;
}

输出

运行此代码时,将产生以下输出 -

Title: Learn C
Price: 675.500000
No of Pages: 325
size of book struct: 32

点运算符与联合

C 语言中的 union 关键字也允许您定义派生数据类型,这与 struct 关键字非常相似。但是,与结构体变量不同,联合类型的变量在任意给定时刻只能有一个成员包含值。

点 (.) 运算符也用于访问和操作 联合 的成员。

示例

您还可以使用点运算符访问联合成员元素,如下例所示 -

#include <stdio.h>
 
union Data {
   int i;
   float f;
   char str[20];
};

int main(){

   union Data data;        

   data.i = 10;
   data.f = 220.5;
   strcpy( data.str, "C Programming");

   printf( "data.i : %d
", data.i);
   printf( "data.f : %f
", data.f);
   printf( "data.str : %s
", data.str);

   return 0;
}

输出

当编译并执行上述代码时,它会产生以下结果 -

data.i : 1917853763
data.f : 4122360580327794860452759994368.000000
data.str : C Programming

嵌套结构的点运算符

嵌套结构是指结构体类型的某个元素本身是一个或多个类型的复合表示。

点运算符也可用于访问嵌套结构体(以及联合类型)的成员。操作方式与访问普通结构体相同。

假设我们有一个如下所示的嵌套结构体 -

struct struct1 {
   var1;
   var2;
   struct struct2 {
      var3;
      var4;
   } s2;
} s1;

在本例中,s1 的成员访问方式与之前相同(s1.var1 和 s1.var2),而内部结构体的成员访问方式为 -

s1.s2.var3;

示例

在本例中,我们有一个 employee 数据类型,其元素之一是出生日期 (dob)。我们将在 employee 结构体中声明一个包含三个 int 类型"d"、"m"和"y"的 dob 结构体,其变量 d1 是外部类型的元素之一。

#include <stdio.h>

struct employee {
   char name[10];
   float salary;
   struct dob {
      int d, m, y;
   } d1;
};

int main(){

   struct employee e1 = {"Kiran", 25000, {12, 5, 1990}};

   printf("Name: %s
", e1.name);
   printf("Salary: %f
", e1.salary);
   printf("Date of Birth: %d-%d-%d
", e1.d1.d, e1.d1.m, e1.d1.y);

   return 0;
}

输出

运行代码并检查其输出 −

Name: Kiran
Salary: 25000.000000
Date of Birth: 12-5-1990

使用箭头运算符访问结构体变量的成员

C 语言还有另一种访问结构体变量成员的方法。可以使用箭头运算符 (->),并借助指向结构体变量的指针来实现。

使用 struct 关键字定义一种新的派生数据类型,语法如下:

struct newtype {
   type elem1;
   type elem2;
   type elem3;
   ...
   ...
};

然后,您可以声明一个此派生数据类型的变量,并将其指针声明为 -

struct newtype var;
struct newtype *ptr=&var;

要通过指针访问某个成员,请使用以下语法

ptr->elem1;

示例

请看以下示例 -

#include <stdio.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 struct1 {
   var1;
   var2;
   struct struct2 {
      var3;
      var4;
   } s2;
} s1;
struct struct1 *ptr=&s1;

要访问嵌套结构的内部结构元素,我们使用以下语法 -

ptr -> s2.var3;

示例

查看以下示例 -

#include <stdio.h>

struct employee {
   char name[10];
   float salary;
   struct dob {
      int d, m, y;
   } d1;
};

int main(){

   struct employee e1 = {"Kiran", 25000, {12, 5, 1990}};
   struct employee *ptr = &e1;

   printf("Name: %s
", ptr->name);
   printf("Salary: %f
", ptr->salary);
   printf("Date of Birth: %d-%d-%d
", ptr->d1.d, ptr->d1.m, ptr->d1.y);
   
   return 0;
}

输出

运行代码并检查其输出 −

Name: Kiran
Salary: 25000.000000
Date of Birth: 12-5-1990