值传递
本课属于 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;
}这种行为可以保护你的原始数据,避免被函数意外修改。不过,这也意味着,如果你想让函数实际更改变量的值,值传递就行不通。继续学习指针以及它们如何解决这个问题时,理解这一限制至关重要。
挑战
简单编写一个 C 程序,通过尝试在函数内修改变量,并观察原变量保持不变,来演示值传递的概念。
你的程序应当:
- 创建一个名为
tryToModify的函数,该函数接受一个名为number的整数参数 - 在
tryToModify函数内,将number参数的值加 50 - 在
tryToModify函数内,按以下格式输出修改后的值:Inside function: [value] - 在
main函数中,声明一个名为original的整数变量,并将其初始化为 25 - 调用函数前,按以下格式输出原始值:
Before function call: [value] - 调用
tryToModify函数,并将original变量作为参数传入 - 函数调用后,再次按以下格式输出
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;
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: C 在线编译器