结构体指针(p->data,p.data)的联系

省流:结构体访问成员时,指针用 ->,普通变量用 .,记住这个原则就不会错

      可能在实际编程中遇到这样错误:比如用指针的时候用了点号,导致编译错误。这时候需要指出正确的使用场景,以及两者的区别。


一、具体实例

一个学生结构体,含有名字,学号,成绩元素,通过变量成员,更加具体的展现其用法

#include <stdio.h>
#include <string.h>

// 1. 定义学生结构体
struct Student {
    char name[20];  // 名字
    int id;         // 学号
    float score;    // 成绩
};

int main() {
    // 2. 创建结构体变量(普通变量,用 . 访问成员)
    struct Student stu1; 
    strcpy(stu1.name, "张三"); // 变量直接用 . 赋值
    stu1.id = 1001;
    stu1.score = 85.5;

    // 输出变量成员
    printf("【变量操作】\n");
    printf("姓名: %s\n学号: %d\n成绩: %.1f\n", stu1.name, stu1.id, stu1.score);

    // 3. 创建结构体指针(指针用 -> 访问成员)
    struct Student *p = &stu1; // p 指向 stu1 的地址

    // 通过指针修改成员值
    p->id = 1002;       // 指针用 -> 修改成员
    strcpy(p->name, "李四");
    p->score = 92.0;

    // 输出指针修改后的结果
    printf("\n【指针操作】\n");
    printf("姓名: %s\n学号: %d\n成绩: %.1f\n", p->name, p->id, p->score);

    return 0;
}

二、具体区别

p->data:当 p 是结构体指针时使用(如 struct Student *p

struct Student *p = &stu;
printf("%d", p->data); // 正确!指针用 ->

p.data:当 p 是结构体变量时使用(如 struct Student p

struct Student p;
printf("%d", p.data); // 正确!变量用 .

三,为什么区分

  • -> 是 (*p).data 的简写,专为指针设计。

  • . 直接访问变量成员,无需解引用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值