C语言中箭头符号“->”和点号符号“.”的区别

发布时间 2023-10-07 14:58:41作者: Bonne_chance

在C语言中,箭头符号“->”用于访问及结构体(struct)或联合体(union)类型的成员。可以替代点号“.”来访问结构体或联合体的成员,当通过指针访问时,使用箭头符号。例如,假设有一个结构体类型的指针变量P,其中包含成员变量x,可以使用箭头符号来访问x,如P->x。原因在于P是一个指针,而不是结构体本身。

箭头符号“->”和点号符号“.”在C语言中都用于访问结构体或联合体类型的成员,但它们之间有一些重要的区别。

  1. 语法
  • 点号“.”主要用于直接访问结构体或联合体变量的成员。例如,有一个结构体变量S,其中包含成员变量x,可以使用S.x访问x。
  • 箭头符号“->”主要用于通过指针访问结构体或联合体成员,例如,有一个指向结构体的指针变量P,其中包含成员变量x,可以使用P->x访问x。
  1. 对象类型
  • 点号“.”用于直接访问结构体或联合体变量的成员。
  • 箭头符号“->”用于通过指针访问指向结构体或联合体的成员。
  1. 使用场景
  • 点号“.”主要用于直接操作结构体或联合体。
  • 箭头符号“->”主要用于指针操作结构体或联合体。

总之,点号和箭头符号在访问结构体或联合体成员时使用的语法和对象类型有所不同,取决于你是直接操作变量还是通过指针访问。

以下是两个例子来对比点号“.”和箭头符号“->”的不同之处

例1. 使用点号“.”直接访问结构体成员

#include <stdio.h>

struct Person {
   char name[20];
   int age;
};

int main() {
   struct Person p1;

   strcpy(p1.name, "John");
   p1.age = 25;

   printf("Name: %s\n", p1.name);
   printf("Age: %d\n", p1.age);

   return 0;
}

输出:

Name: John
Age: 25

在这个例子里,我们声明了一个结构体类型Person,并使用点号“.”直接访问p1的成员。通过赋值和打印语句,我们直接操作p1的成员变量name和age。

例2. 使用箭头符号“->”访问成员

#include <stdio.h>
#include <stdlib.h>

struct Person {
   char name[20];
   int age;
};

int main() {
   struct Person *p2;

   p2 = (struct Person*) malloc(sizeof(struct Person));

   strcpy(p2->name, "Emily");
   p2->age = 32;

   printf("Name: %s\n", p2->name);
   printf("Age: %d\n", p2->age);

   free(p2);

   return 0;
}

输出:

Name: Emily
Age: 32

在这里例子里,我们声明了一个指向结构体的指针变量p2,并使用箭头符号“->”通过指针访问结构体的成员,通过动态内存分配(malloc)来分配结构体内存,并操作p2指向的结构体的成员变量name和age。

以上通过两个例子,可以按到点号“.”和箭头符号“->”在语法和使用方式上的不同。点号用于直接操作结构体变量的成员,而箭头符号用于通过指针访问结构体的成员。