“结构体传值与指针传递中的 &I’mp; 和 * 使用解析 – GitHub项目:Favorites”

理解 &* 在结构体传值过程中的作用

对比例子,展示**结构体传值(值传递 vs. 指针传递)**时 &* 如何使用。


🧪 示例一:结构体 值传递(不使用 &

#include <stdio.h>

struct Person {
    char name[20];
    int age;
};

void update(struct Person p) {
    p.age = 99;  // 只修改了副本
}

int main() {
    struct Person p1 = {"Alice", 25};

    update(p1);  // 传的是副本
    printf("main 中 age: %d
", p1.age);  // 仍是 25

    return 0;
}

📝 输出:

main 中 age: 25

🔍 说明:

  • update(p1); 传入的是结构体的 拷贝
  • 函数内部修改不会影响原始变量

✅ 示例二:结构体 指针传递(使用 &*

#include <stdio.h>

struct Person {
    char name[20];
    int age;
};

void update(struct Person *p) {
    p->age = 99;  // 修改的是原始变量
}

int main() {
    struct Person p1 = {"Alice", 25};

    update(&p1);  // 传入的是地址(指针)
    printf("main 中 age: %d
", p1.age);  // 目前是 99

    return 0;
}

📝 输出:

main 中 age: 99

🔍 说明:

  • &p1:取结构体变量的地址
  • 函数参数是 struct Person *p,接受这个地址
  • 使用 p->age(*p).age 修改原始变量的内容

💡 关键点总结:

操作 意义
&p1 取结构体变量 p1 的地址(得到 struct Person * 类型)
*p 解引用指针,访问它所指向的结构体变量
p->age 相当于 (*p).age,是指针访问结构体成员的快捷写法

📌 使用场景提议:

使用方式 特点 场景
直接传结构体(值传递) 开销较大,不能修改原始值 临时使用,数据小、无需修改时
传结构体指针 开销小,可直接修改原始结构体内容 大型结构体、需要修改原值时最推荐使用
© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容