Menu
×
   ❮   
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;

开始练习



×

Contact Sales

If you want to use W3Schools services as an educational institution, team or enterprise, send us an e-mail:
[email protected]

Report Error

If you want to report an error, or if you want to make a suggestion, send us an e-mail:
[email protected]

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.

Copyright 1999-2024 by Refsnes Data. All Rights Reserved. W3Schools is Powered by W3.CSS.