打印
[技术问答]

. 和 ->符号的区别

[复制链接]
1495|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
在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;
}


使用特权

评论回复
沙发
zhuomuniao110|  楼主 | 2025-2-27 21:09 | 只看该作者
总结
. 用于直接访问结构体或联合体变量的成员。

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

-> 是 (*指针).成员名 的简写形式,代码更简洁。

使用特权

评论回复
板凳
地瓜patch| | 2025-2-28 08:38 | 只看该作者
.常用并且理解,-->用的少,还没理解,只是依葫芦画瓢

使用特权

评论回复
地板
gejigeji521| | 2025-2-28 15:22 | 只看该作者
以前我也是经常搞混。报错了才改

使用特权

评论回复
5
wang6623| | 2025-3-31 13:53 | 只看该作者
. 和 -> 都是用于访问结构体或联合体成员的运算符,但它们的使用场景和操作对象有所不同。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

217

主题

3430

帖子

11

粉丝