C 指针


创建指针

你从上一章中了解到,我们可以得到内存地址带有引用运算符的变量&:

示例

int myAge = 43; // an int variable

printf("%d", myAge);  // Outputs the value of myAge (43)
printf("%p", &myAge); // Outputs the memory address of myAge (0x7ffe5367e044)
亲自试一试 »

指针是一个变量商店这个内存地址另一个变量作为其值。

指针变量到一个数据类型(喜欢int)相同类型,并且是用*运算符。

您正在使用的变量的地址被分配给指针:

示例

int myAge = 43;     // An int variable
int* ptr = &myAge;  // A pointer variable, with the name ptr, that stores the address of myAge

// Output the value of myAge (43)
printf("%d\n", myAge);

// Output the memory address of myAge (0x7ffe5367e044)
printf("%p\n", &myAge);

// Output the memory address of myAge with the pointer (0x7ffe5367e044)
printf("%p\n", ptr);
亲自试一试 »

示例解释

创建一个带有名称的指针变量ptr, 那指着一个 int多变的 (myAge)。请注意,指针的类型必须与您正在使用的变量的类型匹配(int在我们的例子中)。

使用&运算符存储的内存地址myAge变量,并将其赋值给指针。

现在,ptr持有的值myAge的内存地址。


解引用

在上面的例子中,我们使用指针变量来获取变量的内存地址(与&参考运算符)。

您还可以使用以下命令获取指针指向的变量的值*运算符(解引用运算符):

示例

int myAge = 43;     // Variable declaration
int* ptr = &myAge;  // Pointer declaration

// Reference: Output the memory address of myAge with the pointer (0x7ffe5367e044)
printf("%p\n", ptr);

// Dereference: Output the value of myAge with the pointer (43)
printf("%d\n", *ptr);
亲自试一试 »

请注意,*符号在这里可能会令人困惑,因为它在我们的代码中做了两个不同的事情:

  • 当在声明中使用时 (int* ptr),它创建了一个指针变量
  • 当未在声明中使用时,它充当解引用运算符

很高兴知道:C 语言中声明指针变量有两种方法:

int* myNum;
int *myNum;

关于指针的注释

指针是 C 语言从其他编程语言中脱颖而出的原因之一,例如PythonJAVA

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

不过要小心;必须小心处理指针,因为可能会损坏存储在其他内存地址中的数据。


C 练习

通过练习测试一下

练习:

创建一个名为的指针变量指针,这指向int变量我的年龄:

int myAge = 43;
  = &myAge;

开始练习