C 语言函数传参的两种方式

左右是两场独立的演示,建议先看左边,再看右边 —— 每个面板有自己的「开始演示」按钮

① 传 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;}
main 的内存区域
int a 5
函数的内存区域
int x 5 从 a 复制来的
控制台输出
✔ 函数结束后,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 —— 原来的数据被直接改掉了
就绪 看完左边之后,点击下方的「开始演示」,看传地址时发生了什么。