您从上一章中了解到,我们可以使用引用运算符 &
获取变量的内存地址:
int myAge = 43; // 一个 int 变量
printf("%d", myAge); // 输出 myAge (43) 的值
printf("%p", &myAge); // 输出myAge的内存地址(0x7ffe5367e044)
在上面的示例中,&myAge
也称为指针。
指针 是一个变量,它存储另一个变量的内存地址作为其值。
指针变量 指向同一类型的数据类型(如 int
),并使用 *
运算符创建。 您正在使用的变量的地址分配给指针:
int myAge = 43; // 一个 int 变量
int* ptr = &myAge; // 一个名为 ptr 的指针变量,用于存储 myAge 的地址
// 输出 myAge (43) 的值
printf("%d\n", myAge);
// 输出myAge的内存地址(0x7ffe5367e044)
printf("%p\n", \&myAge);
// 用指针(0x7ffe5367e044)输出myAge的内存地址
printf("%p\n", ptr);
创建一个名为 ptr
的指针变量,它指向一个 int
变量(myAge
)。 请注意,指针的类型必须与您正在使用的变量的类型相匹配。
使用 &
运算符存储 myAge
变量的内存地址,并将其分配给指针。
现在,ptr
保存了myAge
的内存地址的值。
在上面的示例中,我们使用指针变量来获取变量的内存地址(与 &
**reference ** 运算符一起使用)。
但是,您也可以使用 *
运算符(**dereference ** 运算符)获取指针指向的变量的值:
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;
int * myNum;