Cprogramming 简明教程
Dot (.) Operator in C
Dot (.) Operator in C
dot (.) operator in C 语言也称为 “ direction selection member ”。它用于选择结构和联合的成员。 dot (.) operator 是一个二元运算符,需要两个运算数(结构或联合名称和成员名称),并且它具有最高 operator precedence 。
当你想要访问和操作结构和联合的成员 ( variables ) 时, dot (.) operator 很有用。
Using Dot (.) Operator
点 (.) 运算符使用结构和联合变量名称选择 structure 和联合的成员。以下是使用点 (.) 运算符访问结构或联合的成员的语法 −
var.member;
此处, var 是某个结构或联合类型的一个变量, member 是在创建结构或联合时定义的一个元素。
Dot Operator with Structure (struct)
如上所述,点 (.) 运算符用于访问和操作结构的成员。
Example
让我们声明一个名为 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\n", b1.title);
printf("Price: %lf\n", b1.price);
printf("No of Pages: %d\n", 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
Dot Operator with Union
C 中的 union 关键字还允许你定义一个派生数据类型,与 struct 关键字非常相似。但是,与结构变量不同,联合类型变量仅一个成员可以在任何给定时间包含一个值。
点 (.) 运算符还用于访问和操作 union 的成员。
Example
你还可以使用点运算符访问联合成员元素,如本示例所示 −
#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\n", data.i);
printf( "data.f : %f\n", data.f);
printf( "data.str : %s\n", data.str);
return 0;
}
编译并执行上述代码后,将产生以下结果 −
data.i : 1917853763
data.f : 4122360580327794860452759994368.000000
data.str : C Programming
Dot Operator with Nested Structure
Nested structures 在结构类型的某个元素本身是多个类型的一种复合表示形式时定义。
点运算符还可用于访问嵌套结构(以及联合类型)的成员。它可以与普通结构相同的方式进行。
假设我们有一个嵌套结构,如下所示 −
struct struct1 {
var1;
var2;
struct struct2 {
var3;
var4;
} s2;
} s1;
在这种情况下,s1 的成员以前的访问方式(例如 s1.var1 和 s1.var2),内部结构的成员访问方式如下 −
s1.s2.var3;
Example
在本示例中,我们有一个 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\n", e1.name);
printf("Salary: %f\n", e1.salary);
printf("Date of Birth: %d-%d-%d\n", e1.d1.d, e1.d1.m, e1.d1.y);
return 0;
}
运行代码并检查其输出:
Name: Kiran
Salary: 25000.000000
Date of Birth: 12-5-1990
Accessing the Members Using the Arrow Operator
C 还有另一种方法来访问结构变量的成员。它可以使用指向结构变量的 pointer ,通过箭头运算符 (→) 来完成。
使用 struct 关键字定义了新的派生数据类型,语法如下:
struct newtype {
type elem1;
type elem2;
type elem3;
...
...
};
然后,您可以声明该派生数据类型的变量及其指针:
struct newtype var;
struct newtype *ptr=&var;
要通过指针访问某个成员,请使用以下语法:
ptr->elem1;
Example
请看以下示例:
#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\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
Accessing the Elements of a Nested Inner Structure
对于 nested structure ,
struct struct1 {
var1;
var2;
struct struct2 {
var3;
var4;
} s2;
} s1;
struct struct1 *ptr=&s1;
要访问嵌套结构的内部结构的元素,我们使用以下语法:
ptr -> s2.var3;
Example
请看以下示例:
#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\n", ptr->name);
printf("Salary: %f\n", ptr->salary);
printf("Date of Birth: %d-%d-%d\n", ptr->d1.d, ptr->d1.m, ptr->d1.y);
return 0;
}
运行代码并检查其输出:
Name: Kiran
Salary: 25000.000000
Date of Birth: 12-5-1990