理解 & 和 * 在结构体传值过程中的作用
对比例子,展示**结构体传值(值传递 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


















暂无评论内容