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



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

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

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

使用点(.)运算符

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

var.member;

这里,var是某种struct或union类型的变量,而member是在创建结构体或联合体时定义的元素之一。

示例

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

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

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

struct newtype var;

要访问某个成员,

var.elem1;

结构体(struct)中的点运算符

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

示例

让我们声明一个名为book的struct类型和一个struct变量。以下示例显示了如何使用点运算符(.)访问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

联合体中的点运算符

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

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

示例

您也可以使用点运算符访问联合体成员元素,如本例所示:

#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

嵌套结构体中的点运算符

当struct类型的一个元素本身就是一个或多个类型的复合表示时,就定义了嵌套结构体

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

假设我们有如下嵌套结构体:

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\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

使用箭头运算符访问成员

C语言还有另一种方法可以访问struct变量的成员。这可以通过指针指向struct变量,使用箭头运算符(->)来实现。

使用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\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 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\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
广告