zhuomuniao110 发表于 2025-2-27 21:09

. 和 ->符号的区别

在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

以前我也是经常搞混。报错了才改

wang6623 发表于 2025-3-31 13:53

. 和 -> 都是用于访问结构体或联合体成员的运算符,但它们的使用场景和操作对象有所不同。
页: [1]
查看完整版本: . 和 ->符号的区别