IC卡密码修改机制详解:从CHANGE PIN命令到安全实现
2026/6/5 13:27:59
指针是C++中强大而重要的特性,它是一个变量,存储的是内存地址而不是值本身。通过指针,我们可以直接操作内存,实现高效灵活的内存管理。
intdonuts=6;doublecups=4.5;cout<<"donuts地址: "<<&donuts<<endl;// 使用&获取地址cout<<"cups地址: "<<&cups<<endl;intupdates=6;int*p_updates;// 声明指向int的指针p_updates=&updates;// 将updates的地址赋给指针cout<<"值: updates = "<<updates;cout<<", *p_updates = "<<*p_updates<<endl;// *解引用获取值cout<<"地址: &updates = "<<&updates;cout<<", p_updates = "<<p_updates<<endl;*p_updates=*p_updates+1;// 通过指针修改值cout<<"现在 updates = "<<updates<<endl;// 输出: 7int*ptr;// C++风格,强调类型int*ptr;// C风格,强调*ptr是int值int*ptr;// 中间风格,空格不影响// 注意:下面声明一个指针p1和一个int变量p2int*p1,p2;// p1是指针,p2是普通int变量double*tax_ptr;// 指向double的指针char*str;// 指向char的指针// 虽然都是指针,但类型不同,不能混用int*pn=newint;// 分配一个int大小的内存double*pd=newdouble;// 分配一个double大小的内存*pn=1001;// 在分配的内存中存储值*pd=10000001.0;int*ps=newint;// 分配内存// 使用内存...deleteps;// 释放内存ps=nullptr;// 好习惯:释放后设为空指针重要规则:
int*psome=newint[10];// 创建10个int的动态数组double*p3=newdouble[3];p3[0]=0.2;// 像普通数组一样使用p3[1]=0.1;p3[2]=0.8;// 指针算术p3=p3+1;// 指针移动到下一个元素cout<<"p3[0]现在是: "<<p3[0]<<endl;// 输出0.1p3=p3-1;// 移回开头delete[]p3;// 释放数组内存delete[]psome;// 注意:释放数组要加[]// 编译时决策 - 固定大小intstaticArray[20];// 总是分配20个元素// 运行时决策 - 动态大小intsize;cout<<"需要多少元素?";cin>>size;int*dynamicArray=newint[size];// 按需分配// 1. 总是初始化指针int*ptr=nullptr;// 好习惯// 2. 检查指针是否有效if(ptr!=nullptr){*ptr=10;}// 3. 使用delete后设为nullptrdeleteptr;ptr=nullptr;// 错误1:未初始化指针int*badPtr;// 危险!包含垃圾值// *badPtr = 5; // 可能导致程序崩溃// 错误2:内存泄漏voidleakMemory(){int*leak=newint[100];// 忘记delete[] leak;}// 错误3:悬空指针int*dangling=newint;deletedangling;// *dangling = 10; // 错误!内存已释放指针是C++内存管理的核心工具,它提供了:
关键要点:
*解引用获取值new和delete配对管理动态内存delete和delete[]的使用场景掌握指针需要时间和实践,但它是成为高效C++程序员的关键一步。从理解基本概念开始,逐步练习动态内存管理,最终你将能够编写出既高效又灵活的C++程序。