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); // 输出 myAg e的内存地址(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 语言中很重要,因为它们允许我们操作计算机内存中的数据。这可以减少代码并提高性能。如果你熟悉列表、树和图等数据结构,你应该知道指针在实现这些数据结构时特别有用。有时你甚至必须使用指针,例如在处理文件和内存管理时。
但是要小心:指针必须谨慎处理,因为可能会损坏存储在其他内存地址中的数据。