C++ 炼金术: 第 3 卷
第 1 页
🧪

函数参数

Function Parameters

形式参数 (形参)
实际参数 (实参)

本节课关卡

扣哒世界 · 计算机科学2 · C++ · 第36–42关

C++ · 本节课关卡

36 · 边地之叉

先读关卡目标,观察地图,再运用本课知识。

37 · 盗墓者

先读关卡目标,观察地图,再运用本课知识。

38 · 墓地阴魂

先读关卡目标,观察地图,再运用本课知识。

39 · 捉迷藏

先读关卡目标,观察地图,再运用本课知识。

40 · 森林矿工

先读关卡目标,观察地图,再运用本课知识。

41 · 交给劈斩

先读关卡目标,观察地图,再运用本课知识。

42 · 概念挑战. 林地陷阱

先读关卡目标,观察地图,再运用本课知识。

学习路线:读目标 → 看图解 → 写代码 → 运行检查

📜

什么是参数?

想象你有一个魔法配方(函数),但它不仅能造一种东西,而是可以根据你投入的原料(参数)发生变化。

参数 (Parameter) 就是传递给函数的信息,让函数更灵活。

"没有参数的函数就像只能做白开水;
有参数的函数就像万能饮料机,想喝什么造什么!"
makePotion(color)
🏷️

形参 vs 实参

这是新手最容易晕的地方,记住这个比喻:

  • 形式参数 (Formal)
    定义函数时用的名字。就像空标签,用来占位。
  • 实际参数 (Actual)
    调用函数时传的具体数据。就像实际的物品。
🏷️
定义时:target
(标签/形参)
⬅️
👹
调用时:enemy
(实体/实参)
💻

C++ 语法示例

// 1. 定义函数 (使用形参 target) auto checkAndAttack(auto target) { // 在这里,我们只知道它叫 target if(target) { hero.attack(target); } } int main() { // 2. 调用函数 (传入实参 enemy) auto enemy = hero.findNearestEnemy(); checkAndAttack(enemy); return 0; }

数据传递过程

enemy (具体敌人)

⬇️ 赋值

target (临时替身)

⬇️ 使用

hero.attack(target)

🌲

第36关 · 边地之叉

任务: 这里的函数 checkAndAttack 需要处理两个不同的敌人。

我们不需要写两遍攻击逻辑,只需要调用同一个函数两次,传入不同的参数!

auto checkAndAttack(auto target) { if (target) { hero.attack(target); } hero.moveXY(43, 34); } int main() { while(true) { // 处理上方敌人 hero.moveXY(58, 52); auto topEnemy = hero.findNearestEnemy(); checkAndAttack(topEnemy); // 处理下方敌人 hero.moveXY(58, 16); auto bottomEnemy = hero.findNearestEnemy(); checkAndAttack(bottomEnemy); } return 0; }
🏃 ➡️ 👹(Top)
checkAndAttack(top)
🏃 ➡️ 👹(Bottom)
checkAndAttack(bottom)
💎

第39关 · 捉迷藏

参数不仅可以是敌人,也可以是物品 (Item)。

在 C++ 中,我们可以访问参数的属性,比如 item.pos.x。

auto checkTakeHide(auto item) { if (item) { // 移动到物品的位置 hero.moveXY(item.pos.x, item.pos.y); // 藏起来 hero.moveXY(40, 34); } } int main() { while(true) { // 去找发光石 hero.moveXY(68, 56); auto lightstone = hero.findNearestItem(); checkTakeHide(lightstone); // ... 去其他地方找 ... } return 0; }
🏃 ➡️ 💎
🏃 ⬅️ 🌲
⚠️

第41关 · 交给劈斩

很多新手会在这里晕头转向。

问题: 外面叫 enemy,里面叫 target,它们是同一个东西吗?
答案: 是的!
就像接力赛跑,enemy 是把接力棒交给了 target。在函数内部,我们只认 target。
auto cleaveWhenClose(auto target) { if(hero.distanceTo(target) < 5) { // ... 攻击逻辑 ... } }
🤝
传递接力棒
🎓

炼金术士口诀

"形式参数像空杯,
定义时候占个位!"

"实际参数像倒水,
调用时候传数据!"

🏆

我的知识宝藏 · 一页复习

扣哒世界 · 计算机科学2 · C++ · 第36–42关

C++ · 知识点图
关键字方法 / 函数字符串数字

什么是参数?

想象你有一个魔法配方(函数),但它不仅能造一种东西,而是可以根据你投入的原料(参数)发生变化。

形参 vs 实参

这是新手最容易晕的地方,记住这个比喻:

C++ 语法示例

enemy (具体敌人)

hero.attack(target);

第36关 · 边地之叉

任务: 这里的函数 checkAndAttack 需要处理两个不同的敌人。

hero.attack(target);

第39关 · 捉迷藏

参数不仅可以是敌人,也可以是物品 (Item)。

hero.moveXY(item.pos.x, item.pos.y);

第41关 · 交给劈斩

很多新手会在这里晕头转向。

本节课关卡:36. 边地之叉;37. 盗墓者;38. 墓地阴魂;39. 捉迷藏;40. 森林矿工;41. 交给劈斩;42. 概念挑战. 林地陷阱