Menu
CoddyTech

通过指针修改变量

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

现在,你可以发挥指针的真正威力:通过函数修改原始变量。将指针传递给函数后,函数可以使用解引用运算符来更改存储在该内存地址中的值。

在函数内部,你使用 * 运算符解引用指针,以访问和修改原始变量的值。这种技术称为按引用传递,因为你传递的是变量在内存中的位置的引用。

void doubleValue(int *ptr) {
    *ptr = *ptr * 2;  // 解引用以修改原来的值
}

int main() {
    int x = 5;
    doubleValue(&x);  // 传入 x 的地址
    // x 现在是 10 了!
    return 0;
}

关键在于在赋值语句的左侧使用 *ptr,修改指针所持有的内存地址中的值。这样,函数就能永久修改调用函数中的变量,从而实现仅靠按值传递无法实现的强大编程功能。

challenge icon

挑战

简单

编写一个 C 程序,通过创建一个将整数值变为三倍的函数,演示如何通过指针修改变量。

你的程序应当:

  1. 创建一个名为 tripleValue 的函数,该函数将指向整数的指针作为参数
  2. 在 tripleValue 函数中,使用解引用运算符将内存地址处的值乘以 3
  3. 在 tripleValue 函数中,按以下格式打印新值:Value tripled to: [value]
  4. 在 main 函数中,声明一个名为 number 的整数变量,并将其初始化为值 8
  5. 按以下格式打印原始值:Original value: [value]
  6. 调用 tripleValue 函数,并使用取地址运算符传入 number 变量的地址
  7. 函数调用后,按以下格式打印 number 的最终值:Final value: [value]

你的输出应展示函数如何通过指针成功修改原始变量:

Original value: 8
Value tripled to: 24
Final value: 24

这个挑战展示了使用指针按引用传递的强大之处。函数可以通过解引用指针并更改该内存位置的值,永久修改原始变量。

亲手试试

#include <stdio.h>

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

int main() {
    // TODO: 在这里编写你的代码
    // 声明并初始化 number 变量
    // 打印原始值
    // 调用 tripleValue 函数
    // 打印最终值
    
    return 0;
}
quiz icon自我测试

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

逻辑与流程中的所有课

自己练习: C 在线编译器