亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

C++ 指针深度解析:从入门到实战

C++ 指针深度解析

本教程通过图解与代码实例,全面讲解 C++ 指针的内存模型、声明、解引用、常见陷阱及最佳实践。

在 C++ 中,指针是存储另一变量内存地址的变量。指针实现了直接内存操作、动态内存分配和高效数据处理。

C++ 中的地址

对于变量 var,表达式 &var 返回其内存地址。例如:

示例 1:打印变量地址

#include <iostream>
using namespace std;

int main() {
    int var1 = 3;
    int var2 = 24;
    int var3 = 17;

    cout << "Address of var1: " << &var1 << endl;
    cout << "Address of var2: " << &var2 << endl;
    cout << "Address of var3: " << &var3 << endl;
}

输出

Address of var1: 0x7fff5fbff8ac
Address of var2: 0x7fff5fbff8a8
Address of var3: 0x7fff5fbff8a4

地址以十六进制显示。相邻变量地址相差 4 字节,反映了 64 位系统上 int 占 4 字节。

注意: 每次运行程序时,具体地址可能不同。


C++ 指针声明

指针存储地址而非直接值。声明指针:

int *pointVar;

推荐将星号紧贴类型名,强调类型语义:

int* pointVar; // 推荐风格

混合声明时需注意:

int* pointVar, p;

此处 pointVar 是指针,p 是普通 int。星号结合的是变量名而非类型。

提示: 声明指针时 * 不是乘法运算符。


将地址赋给指针

使用取地址运算符 & 绑定指针:

int* pointVar, var;
var = 5;
pointVar = &var;  // pointVar 现在保存 var 的地址

通过指针获取值(解引用)

解引用运算符 * 取得指针指向地址处的值:

int* pointVar, var;
var = 5;
pointVar = &var;
cout << *pointVar << endl;  // 输出: 5

*pointVar 即为 var 的值(5)。* 称为解引用运算符。

注意: pointVar(指针本身)与 *pointVar(指向的值)是两个完全不同的实体。


示例 2:指针工作机制演示

#include <iostream>
using namespace std;

int main() {
    int var = 5;
    int* pointVar;
    pointVar = &var;

    cout << "var = " << var << endl;
    cout << "Address of var (&var) = " << &var << endl << endl;
    cout << "pointVar = " << pointVar << endl;
    cout << "Content of address pointed to by pointVar (*pointVar) = " << *pointVar << endl;
    return 0;
}

输出

var = 5
Address of var (&var) = 0x61ff08
pointVar = 0x61ff08
Content of the address pointed to by pointVar (*pointVar) = 5

通过指针修改值

若 pointVar 指向 var,修改 *pointVar 会改变原变量:

int var = 5;
int* pointVar = &var;
*pointVar = 1;
cout << var << endl;  // 输出: 1

两者持有相同地址,解引用修改即修改原变量。


示例 3:双向修改演示

#include <iostream>
using namespace std;

int main() {
    int var = 5;
    int* pointVar = &var;

    cout << "var = " << var << endl;
    cout << "*pointVar = " << *pointVar << endl << endl;

    cout << "Changing value of var to 7:" << endl;
    var = 7;
    cout << "var = " << var << endl;
    cout << "*pointVar = " << *pointVar << endl << endl;

    cout << "Changing value of *pointVar to 16:" << endl;
    *pointVar = 16;
    cout << "var = " << var << endl;
    cout << "*pointVar = " << *pointVar << endl;
    return 0;
}

输出

var = 5
*pointVar = 5
Changing value of var to 7:
var = 7
*pointVar = 7
Changing value of *pointVar to 16:
var = 16
*pointVar = 16

指针常见错误与正确用法

int var, *varPoint;
// 错误!varPoint 是地址,var 是值
varPoint = var;
// 错误!&var 是地址,*varPoint 是值
*varPoint = &var;
// 正确!varPoint 和 &var 都是地址
varPoint = &var;
// 正确!*varPoint 和 var 都是值
*varPoint = var;

推荐进阶阅读:

C++ 指针深度解析:从入门到实战

C语言

  1. 深入理解 C++ 数据类型:基础类型、修饰符与最佳实践
  2. 掌握 C++ 运算符:六大类型全解析与实战示例
  3. C++ 注释最佳实践:编写可读、可维护代码的注释艺术
  4. C++ 类模板实战指南:编写灵活的类型无关代码
  5. 精通C语言指针:专家级实战教程
  6. C++ 指针精通:核心概念、代码示例与实战应用
  7. C 语言指针实战:从入门到高级编程
  8. C++编程语言:核心特性全景解析
  9. C++常量与字面量完全手册:类型、语法与最佳实践
  10. C++运算符大全:算术/关系/逻辑/位/赋值/杂项与优先级结合性
  11. C++数值类型实战指南:基本类型、数学函数与随机数生成
  12. C++引用详解:核心概念、与指针三大差异及函数参数/返回值应用