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