[技术问答] . 和 ->符号的区别

[复制链接]
 楼主| 发表于 2025-2-27 21:09 | 显示全部楼层 |阅读模式
在C语言中,. 和 -> 都是用于访问结构体或联合体成员的运算符,但它们的使用场景和操作对象有所不同。以下是它们的详细区别:
. 运算符
. 是 成员访问运算符,用于直接访问结构体或联合体变量的成员。

用法:

  1. 结构体变量名.成员名;
  1. #include <stdio.h>

  2. struct Point {
  3.     int x;
  4.     int y;
  5. };

  6. int main() {
  7.     struct Point p1;  // 定义一个结构体变量
  8.     p1.x = 3;         // 使用 . 访问成员
  9.     p1.y = 4;

  10.     printf("x = %d, y = %d\n", p1.x, p1.y);  // 输出: x = 3, y = 4

  11.     return 0;
  12. }
特点:
操作对象是 结构体变量 或 联合体变量。

直接访问变量的成员。

不需要指针。

------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------




-> 运算符
-> 是 指针成员访问运算符,用于通过指针访问结构体或联合体的成员。

用法:

  1. 结构体指针->成员名;
  1. #include <stdio.h>

  2. struct Point {
  3.     int x;
  4.     int y;
  5. };

  6. int main() {
  7.     struct Point p1 = {3, 4};  // 定义一个结构体变量
  8.     struct Point *ptr = &p1;   // 定义一个指向结构体的指针

  9.     printf("x = %d, y = %d\n", ptr->x, ptr->y);  // 输出: x = 3, y = 4

  10.     return 0;
  11. }
特点:
操作对象是 结构体指针 或 联合体指针。

通过指针间接访问成员。

等价于 (*指针).成员名。


2379367c063e5029bf.png
  1. #include <stdio.h>

  2. struct Point {
  3.     int x;
  4.     int y;
  5. };

  6. int main() {
  7.     // 使用 . 访问结构体成员
  8.     struct Point p1;
  9.     p1.x = 3;
  10.     p1.y = 4;
  11.     printf("p1: x = %d, y = %d\n", p1.x, p1.y);  // 输出: p1: x = 3, y = 4

  12.     // 使用 -> 访问结构体成员
  13.     struct Point *ptr = &p1;
  14.     ptr->x = 5;
  15.     ptr->y = 6;
  16.     printf("p1: x = %d, y = %d\n", p1.x, p1.y);  // 输出: p1: x = 5, y = 6

  17.     // 等价形式
  18.     (*ptr).x = 7;
  19.     (*ptr).y = 8;
  20.     printf("p1: x = %d, y = %d\n", p1.x, p1.y);  // 输出: p1: x = 7, y = 8

  21.     return 0;
  22. }


 楼主| 发表于 2025-2-27 21:09 | 显示全部楼层
总结
. 用于直接访问结构体或联合体变量的成员。

-> 用于通过指针间接访问结构体或联合体的成员。

-> 是 (*指针).成员名 的简写形式,代码更简洁。
发表于 2025-2-28 08:38 来自手机 | 显示全部楼层
.常用并且理解,-->用的少,还没理解,只是依葫芦画瓢
发表于 2025-2-28 15:22 | 显示全部楼层
以前我也是经常搞混。报错了才改
发表于 2025-3-31 13:53 | 显示全部楼层
. 和 -> 都是用于访问结构体或联合体成员的运算符,但它们的使用场景和操作对象有所不同。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

232

主题

3495

帖子

11

粉丝
快速回复 返回顶部 返回列表