访问结构体的成员 . 和 -> 到底如何使用?

(本篇根据AI回答修改整理。)

在 C 语言中,. 和 -> 都用于访问结构体中的成员,但它们的使用场景不同。

下面简单通俗地解释它们的区别与联系:

一  . (点运算符)

        适用场景:用于直接访问结构体变量的成员。

        前提条件:. 左侧必须是结构体变量,不是指针。

        语法:

        结构体变量.成员

示例:

struct Point {
    int x;
    int y;
};

struct Point p = {10, 20};  // 定义结构体变量 p
printf("%d\n", p.x);       // 使用 `.` 访问 p 的 x 成员,输出 10
printf("%d\n", p.y);       // 使用 `.` 访问 p 的 y 成员,输出 20

二  -> (箭头运算符)

        适用场景:用于通过指针访问结构体变量的成员。

        前提条件:-> 左侧必须是指向结构体的指针。

        语法:

        结构体指针->成员

示例:

struct Point {
    int x;
    int y;
};

struct Point p = {10, 20};
struct Point* ptr = &p;    // 定义指向结构体的指针 ptr
printf("%d\n", ptr->x);    // 使用 `->` 访问 ptr 所指向结构体的 x 成员,输出 10
printf("%d\n", ptr->y);    // 使用 `->` 访问 ptr 所指向结构体的 y 成员,输出 20

三  . 和 -> 的区别

区别.->
左侧对象是结构体变量是指向结构体的指针
适用场景用于直接访问结构体的成员用于通过指针访问结构体的成员
语法复杂度简单稍复杂,需间接访问结构体成员

四  . 和 -> 的联系

        在本质上,-> 是对 * 和 . 的简化。你可以用 . 和解引用运算符 * 的组合来代替 ->,如下:

struct Point {
    int x;
    int y;
};

struct Point p = {10, 20};
struct Point* ptr = &p;

// 使用 `->`
printf("%d\n", ptr->x);    // 输出 10

// 等价的替代写法:先解引用指针,再用 `.` 访问
printf("%d\n", (*ptr).x);  // 输出 10

        注意(*ptr).x 的括号不能省略,否则编译器会报错,因为 . 的优先级高于 *。

五 总结

        如果你有一个结构体变量,使用  

        如果你有一个指向结构体的指针,使用  -> 

        -> 是 (*ptr).成员 的简化写法,更方便、更常用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王_哈_哈 Jw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值