Menu
CoddyTech

解引用运算符(*)

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

现在你已经知道如何在指针中存储地址,接下来需要学习如何访问存储在该内存地址中的实际值。解引用运算符(*)可以让你“跟随”指针,获取它指向的值。

当你把 * 运算符放在指针变量前面时,它会访问指针所保存的内存地址中存储的值。你可以把它理解为:“给我这个地址对应房间里的东西。”

int age = 25;
int *ptr = &age;
printf("%d", *ptr);    // 打印 25,即 age 的值

要理解星号(*)在 C 中有两种不同的含义,这一点很重要。声明指针时,例如 int *ptr;,星号表示 ptr 是一个指针。将星号用于已有指针时,例如 *ptr,它会解引用该指针,以访问指针所指向的值。

解引用运算符很重要,因为它完成了指针循环:你可以用 & 将地址存储在指针中,然后用 * 获取该地址处的值。这样你就可以通过变量的内存地址间接访问和修改变量。

challenge icon

挑战

简单

编写一个 C 程序,演示完整的指针操作流程:声明、地址赋值和解引用。你的程序应当:

  1. 声明一个名为 value 的整数变量,并将其初始化为值 75
  2. 声明一个名为 price 的浮点变量,并将其初始化为值 19.99
  3. 声明一个名为 value_ptr 的整数指针
  4. 声明一个名为 price_ptr 的浮点指针
  5. 使用取地址运算符,将 value 的地址赋给 value_ptr
  6. 使用取地址运算符,将 price 的地址赋给 price_ptr
  7. 使用解引用运算符,通过 value_ptr 打印 value 的值
  8. 使用解引用运算符,通过 price_ptr 打印 price 的值,并保留 2 位小数

你的输出应按照以下格式显示解引用后的值:

Value through pointer: 75
Price through pointer: 19.99

这道挑战会检验你是否理解解引用运算符如何通过指针存储的地址,获取原始变量的值。

亲手试试

#include <stdio.h>

int main() {
    // TODO: 在这里编写你的代码
    // 1. 声明并初始化变量
    // 2. 声明指针
    // 3. 将地址赋给指针
    // 4. 打印指针解引用后的值
    
    return 0;
}
quiz icon自我测试

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

逻辑与流程中的所有课

自己练习: C 在线编译器