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 语言从其他编程语言(如 PythonJava)中脱颖而出的原因之一。

它们在 C 语言中很重要,因为它们允许我们操作计算机内存中的数据。这可以减少代码并提高性能。如果你熟悉列表、树和图等数据结构,你应该知道指针在实现这些数据结构时特别有用。有时你甚至必须使用指针,例如在处理文件内存管理时。

但是要小心:指针必须谨慎处理,因为可能会损坏存储在其他内存地址中的数据。