① 传 int(值传递)会复制一份
#include <stdio.h> void addHundred(int x) { x = x + 100; // 改的是副本} int main() { int a = 5; addHundred(a); printf("a = %d\n", a); // 输出: a = 5 return 0;}
✔ 函数结束后,a 仍然是 5 —— 副本被扔掉,原来的值没变
就绪
点击下方的「开始演示」,看 int 传参时发生了什么。
② 传 struct 的地址(指针传递)不复制本体
#include <stdio.h> typedef struct { int hp; } Hero; void damage(Hero *h) { h->hp = 0; // 顺着地址改原件} int main() { Hero hero = {100}; damage(&hero); printf("hp = %d\n", hero.hp); // 输出: hp = 0 return 0;}
main 的内存区域
Hero hero
hp = 100
函数的内存区域
Hero *h
hero 的地址
只拿到了地址
✖ 函数结束后,hero.hp 变成了 0 —— 原来的数据被直接改掉了
就绪
看完左边之后,点击下方的「开始演示」,看传地址时发生了什么。