Menu
CoddyTech

值传递

本课属于 Coddy C 学习旅程的“逻辑与流程”单元。第 25 课,共 63 课。

在 C 中将变量传递给函数时,函数接收的是该变量值的副本,而不是变量本身。这个基本概念称为值传递。

具体来说:如果你有一个值为 10 的变量 x,并将它传递给一个函数,这个函数会获得该值的独立副本。函数对这个副本所做的任何更改,都不会影响调用该函数的函数中的原始变量。

void tryToChange(int num) {
    num = 99;  // 这里只修改了副本
}

int main() {
    int x = 10;
    tryToChange(x);
    // x 仍然是 10,不是 99
    return 0;
}

这种行为可以保护你的原始数据,避免被函数意外修改。不过,这也意味着,如果你想让函数实际更改变量的值,值传递就行不通。继续学习指针以及它们如何解决这个问题时,理解这一限制至关重要。

challenge icon

挑战

简单

编写一个 C 程序,通过尝试在函数内修改变量,并观察原变量保持不变,来演示值传递的概念。

你的程序应当:

  1. 创建一个名为 tryToModify 的函数,该函数接受一个名为 number 的整数参数
  2. 在 tryToModify 函数内,将 number 参数的值加 50
  3. 在 tryToModify 函数内,按以下格式输出修改后的值:Inside function: [value]
  4. 在 main 函数中,声明一个名为 original 的整数变量,并将其初始化为 25
  5. 调用函数前,按以下格式输出原始值:Before function call: [value]
  6. 调用 tryToModify 函数,并将 original 变量作为参数传入
  7. 函数调用后,再次按以下格式输出 original 的值:After function call: [value]

你的输出应表明,尽管函数内进行了修改,原变量的值仍保持不变:

Before function call: 25
Inside function: 75
After function call: 25

这个挑战演示了 C 中值传递的基本概念:函数接收的是变量的副本,而不是变量本身。在函数内对参数所做的任何修改,都不会影响调用函数中的原变量。

亲手试试

#include <stdio.h>

// TODO:在这里编写你的 tryToModify 函数

int main() {
    // TODO:在这里编写你的代码
    // 1. 声明并初始化原始变量
    // 2. 打印调用函数前的值
    // 3. 调用 tryToModify 函数
    // 4. 打印调用函数后的值
    
    return 0;
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: C 在线编译器