菜单
×
   ❮   
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

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 语言区别于其他编程语言(如 PythonJava)的一个重要特性。

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

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


C 练习

通过练习来测试自己

练习

创建一个名为 ptr 的指针变量,它指向 int 变量 myAge。

int myAge = 43;
  = &myAge;

开始练习



×

联系销售

如果您想将 W3Schools 服务用于教育机构、团队或企业,请发送电子邮件给我们
sales@w3schools.com

报告错误

如果您想报告错误,或想提出建议,请发送电子邮件给我们
help@w3schools.com

W3Schools 经过优化,旨在方便学习和培训。示例可能经过简化,以提高阅读和学习体验。教程、参考资料和示例会不断审查,以避免错误,但我们无法保证所有内容的完全正确性。使用 W3Schools 即表示您已阅读并接受我们的使用条款Cookie 和隐私政策

版权所有 1999-2024 Refsnes Data。保留所有权利。W3Schools 由 W3.CSS 提供支持