在C语言中,. 和 -> 都是用于访问结构体或联合体成员的运算符,但它们的使用场景和操作对象有所不同。以下是它们的详细区别:
. 运算符
. 是 成员访问运算符,用于直接访问结构体或联合体变量的成员。
用法:
- #include <stdio.h>
- struct Point {
- int x;
- int y;
- };
- int main() {
- struct Point p1; // 定义一个结构体变量
- p1.x = 3; // 使用 . 访问成员
- p1.y = 4;
- printf("x = %d, y = %d\n", p1.x, p1.y); // 输出: x = 3, y = 4
- return 0;
- }
特点:
操作对象是 结构体变量 或 联合体变量。
直接访问变量的成员。
不需要指针。
------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------
-> 运算符
-> 是 指针成员访问运算符,用于通过指针访问结构体或联合体的成员。
用法:
- #include <stdio.h>
- struct Point {
- int x;
- int y;
- };
- int main() {
- struct Point p1 = {3, 4}; // 定义一个结构体变量
- struct Point *ptr = &p1; // 定义一个指向结构体的指针
- printf("x = %d, y = %d\n", ptr->x, ptr->y); // 输出: x = 3, y = 4
- return 0;
- }
特点:
操作对象是 结构体指针 或 联合体指针。
通过指针间接访问成员。
等价于 (*指针).成员名。
- #include <stdio.h>
- struct Point {
- int x;
- int y;
- };
- int main() {
- // 使用 . 访问结构体成员
- struct Point p1;
- p1.x = 3;
- p1.y = 4;
- printf("p1: x = %d, y = %d\n", p1.x, p1.y); // 输出: p1: x = 3, y = 4
- // 使用 -> 访问结构体成员
- struct Point *ptr = &p1;
- ptr->x = 5;
- ptr->y = 6;
- printf("p1: x = %d, y = %d\n", p1.x, p1.y); // 输出: p1: x = 5, y = 6
- // 等价形式
- (*ptr).x = 7;
- (*ptr).y = 8;
- printf("p1: x = %d, y = %d\n", p1.x, p1.y); // 输出: p1: x = 7, y = 8
- return 0;
- }
|