C 指针
创建指针
您在上一章中了解到,我们可以使用引用运算符 &
获取变量的 **内存地址**
示例
int myAge = 43; // 一个 int 变量
printf("%d", myAge); // 输出 myAge 的值 (43)
printf("%p", &myAge); // 输出 myAge 的内存地址 (0x7ffe5367e044)
亲自尝试 »
**指针** 是一个 **存储** 其他变量 **内存地址** 的变量。
**指针变量** **指向** 同类型 **数据类型** (如 int
),并使用 *
运算符创建。
您正在使用的变量的地址将分配给指针
示例
int myAge = 43; // 一个 int 变量
int* ptr = &myAge; // 一个名为 ptr 的指针变量,存储 myAge 的地址
// 输出 myAge 的值 (43)
printf("%d\n", myAge);
// 输出 myAge 的内存地址 (0x7ffe5367e044)
printf("%p\n", &myAge);
// 使用指针输出 myAge 的内存地址 (0x7ffe5367e044)
printf("%p\n", ptr);
亲自尝试 »
示例说明
创建一个名为 ptr
的指针变量,它 **指向** 一个 int
变量 (myAge
)。请注意,指针的类型必须与您正在使用的变量的类型匹配 (在本例中为 int
)。
使用 &
运算符存储 myAge
变量的内存地址,并将其分配给指针。
现在,ptr
包含 myAge
的内存地址的值。
解引用
在上面的示例中,我们使用指针变量来获取变量的内存地址 (与 &
**引用** 运算符一起使用)。
您也可以使用 *
运算符 (**解引用** 运算符) 来获取指针指向的变量的值。
示例
int myAge = 43; // 变量声明
int* ptr = &myAge; // 指针声明
// 引用:使用指针输出 myAge 的内存地址 (0x7ffe5367e044)
printf("%p\n", ptr);
// 解引用:使用指针输出 myAge 的值 (43)
printf("%d\n", *ptr);
亲自尝试 »
请注意,*
符号在这里可能令人困惑,因为它在我们的代码中做了两件不同的事情
- 在声明中使用 (
int* ptr
) 时,它会创建一个 **指针变量**。 - 在声明中不使用它时,它充当 **解引用运算符**。
**知道这一点很重要:** 在 C 中,有两种方法可以声明指针变量
int* myNum;
int *myNum;
关于指针的说明
指针是 C 与其他编程语言(如 Python 和 Java)区别开来的因素之一。
它们在 C 中很重要,因为它们允许我们操纵计算机内存中的数据。这可以减少代码并提高性能。如果您熟悉链表、树和图等数据结构,那么您应该知道指针对于实现这些数据结构特别有用。有时您甚至必须使用指针,例如在处理 文件 和 内存管理 时。
**但要小心**;指针必须谨慎处理,因为有可能损坏存储在其他内存地址中的数据。