解引用运算符(*)
本课属于 Coddy C 学习旅程的“逻辑与流程”单元。第 4 课,共 63 课。
现在你已经知道如何在指针中存储地址,接下来需要学习如何访问存储在该内存地址中的实际值。解引用运算符(*)可以让你“跟随”指针,获取它指向的值。
当你把 * 运算符放在指针变量前面时,它会访问指针所保存的内存地址中存储的值。你可以把它理解为:“给我这个地址对应房间里的东西。”
int age = 25;
int *ptr = &age;
printf("%d", *ptr); // 打印 25,即 age 的值要理解星号(*)在 C 中有两种不同的含义,这一点很重要。声明指针时,例如 int *ptr;,星号表示 ptr 是一个指针。将星号用于已有指针时,例如 *ptr,它会解引用该指针,以访问指针所指向的值。
解引用运算符很重要,因为它完成了指针循环:你可以用 & 将地址存储在指针中,然后用 * 获取该地址处的值。这样你就可以通过变量的内存地址间接访问和修改变量。
挑战
简单编写一个 C 程序,演示完整的指针操作流程:声明、地址赋值和解引用。你的程序应当:
- 声明一个名为
value的整数变量,并将其初始化为值 75 - 声明一个名为
price的浮点变量,并将其初始化为值 19.99 - 声明一个名为
value_ptr的整数指针 - 声明一个名为
price_ptr的浮点指针 - 使用取地址运算符,将
value的地址赋给value_ptr - 使用取地址运算符,将
price的地址赋给price_ptr - 使用解引用运算符,通过
value_ptr打印value的值 - 使用解引用运算符,通过
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;
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: C 在线编译器