2026/6/10 7:58:54
网站建设
项目流程
网站301重定向代码,网站卡的原因,wordpress支持pdo,大连网站seo顾问深入理解C指针与动态内存管理
一、指针的基本概念
指针是C中强大而重要的特性#xff0c;它是一个变量#xff0c;存储的是内存地址而不是值本身。通过指针#xff0c;我们可以直接操作内存#xff0c;实现高效灵活的内存管理。
1.1 获取变量地址
int donuts 6;
double cu…深入理解C指针与动态内存管理一、指针的基本概念指针是C中强大而重要的特性它是一个变量存储的是内存地址而不是值本身。通过指针我们可以直接操作内存实现高效灵活的内存管理。1.1 获取变量地址intdonuts6;doublecups4.5;coutdonuts地址: donutsendl;// 使用获取地址coutcups地址: cupsendl;1.2 声明和使用指针intupdates6;int*p_updates;// 声明指向int的指针p_updatesupdates;// 将updates的地址赋给指针cout值: updates updates;cout, *p_updates *p_updatesendl;// *解引用获取值cout地址: updates updates;cout, p_updates p_updatesendl;*p_updates*p_updates1;// 通过指针修改值cout现在 updates updatesendl;// 输出: 7二、指针声明和初始化的细节2.1 指针声明方式int*ptr;// C风格强调类型int*ptr;// C风格强调*ptr是int值int*ptr;// 中间风格空格不影响// 注意下面声明一个指针p1和一个int变量p2int*p1,p2;// p1是指针p2是普通int变量2.2 不同类型指针double*tax_ptr;// 指向double的指针char*str;// 指向char的指针// 虽然都是指针但类型不同不能混用三、动态内存管理new和delete3.1 使用new分配内存int*pnnewint;// 分配一个int大小的内存double*pdnewdouble;// 分配一个double大小的内存*pn1001;// 在分配的内存中存储值*pd10000001.0;3.2 使用delete释放内存int*psnewint;// 分配内存// 使用内存...deleteps;// 释放内存psnullptr;// 好习惯释放后设为空指针重要规则new和delete必须配对使用不要delete非new分配的内存不要重复delete同一块内存对空指针delete是安全的四、动态数组4.1 创建动态数组int*psomenewint[10];// 创建10个int的动态数组4.2 使用动态数组double*p3newdouble[3];p3[0]0.2;// 像普通数组一样使用p3[1]0.1;p3[2]0.8;// 指针算术p3p31;// 指针移动到下一个元素coutp3[0]现在是: p3[0]endl;// 输出0.1p3p3-1;// 移回开头delete[]p3;// 释放数组内存4.3 释放动态数组delete[]psome;// 注意释放数组要加[]五、指针与C编程哲学5.1 编译时决策 vs 运行时决策编译时决策数组大小固定效率高但缺乏灵活性运行时决策使用new动态分配灵活适应不同情况// 编译时决策 - 固定大小intstaticArray[20];// 总是分配20个元素// 运行时决策 - 动态大小intsize;cout需要多少元素;cinsize;int*dynamicArraynewint[size];// 按需分配5.2 内存管理区域栈(stack)存储局部变量、函数参数等自动管理堆(heap)/自由存储区(free store)new分配的内存需手动管理六、实用建议和注意事项6.1 指针安全实践// 1. 总是初始化指针int*ptrnullptr;// 好习惯// 2. 检查指针是否有效if(ptr!nullptr){*ptr10;}// 3. 使用delete后设为nullptrdeleteptr;ptrnullptr;6.2 避免常见错误// 错误1未初始化指针int*badPtr;// 危险包含垃圾值// *badPtr 5; // 可能导致程序崩溃// 错误2内存泄漏voidleakMemory(){int*leaknewint[100];// 忘记delete[] leak;}// 错误3悬空指针int*danglingnewint;deletedangling;// *dangling 10; // 错误内存已释放总结指针是C内存管理的核心工具它提供了灵活性运行时决定内存分配效率直接内存操作减少拷贝控制力精细管理内存生命周期关键要点理解指针存储的是地址使用*解引用获取值使用new和delete配对管理动态内存区分delete和delete[]的使用场景始终保持良好的指针使用习惯掌握指针需要时间和实践但它是成为高效C程序员的关键一步。从理解基本概念开始逐步练习动态内存管理最终你将能够编写出既高效又灵活的C程序。