在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;
}
|