
最近流感高发....
各位宝子都要多穿点衣服、带好口罩哦
我先躺板板了..... ρ(-ω-、)ヾ
最近想换一种说话风格,听说能涨粉(bushi),今天来试一下....可能有点奇怪.....
说真的,指针刚开始学的时候确实让人头大.
但一旦开窍了就会发现------也就那么回事儿吧~ 今天咱们用最简单的方式把指针讲明白啦~
所以....指针到底是个啥呢?
简单粗暴的理解:指针就是存地址的小本本。
想象一下吧,你要去找盆友家,盆友告诉你他家在**"** 幸福路123号**"**。
这个地址就是指针,盆友家就是变量啦。
cpp
#include <iostream>
using namespace std;
int main() {
int money = 1000; // 你钱包里有1000块
int *wallet = &money; // wallet记下了money的地址
cout << "钱本身:" << money << endl; // 直接看钱
cout << "钱在哪:" << &money << endl; // 看地址
cout << "小本本上写的地址:" << wallet << endl; // 小本本内容
cout << "按地址去找:" << *wallet << endl; // 按地址找到的钱
return 0;
}
两个关键符号:**&**和 *
· & (取地址) -> "你家在哪?"
· * (解引用) -> "按地址去看看"
这样理解是不是能好一些了呢。
cpp
int phone = 8888;
int *phoneBook = ☎ // 记下phone的地址
cout << *phoneBook << endl; // 输出8888
*phoneBook = 9999; // 通过地址改值
cout << phone << endl; // 输出9999,原值被改了!
嗯....指针的一些操作
怎么说呢....额.....
指针算术:在地址间蹦跳~
cpp
int rooms[3] = {101, 102, 103};
int *key = rooms; // 钥匙指向101房间
cout << *key << endl; // 101房
key++; // 走到下一个房间
cout << *key << endl; // 102房
key++; // 再走一个
cout << *key << endl; // 103房
具体是这样实现的啦~~
函数中的指针:真正的远程操控
cpp
// 这样改不了原值(传复印件)
void fakeSwap(int a, int b) {
int temp = a;
a = b;
b = temp;
}
// 这样才行(传地址)
void realSwap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int x = 5, y = 10;
realSwap(&x, &y); // 把地址传过去
cout << "x=" << x << ", y=" << y << endl; // 真的交换了!
return 0;
}
动态内存:现用现租
cpp
// 租个单间
int *p = new int; // 租房子
*p = 42; // 往里放东西
delete p; // 退租!
// 租个公寓楼
int size = 5;
int *apartment = new int[size]; // 租一整栋
for(int i = 0; i < size; i++) {
apartment[i] = i * 100;
}
delete[] apartment; // 整栋退租
智能指针:自带"管家"服务
手动管理内存太累?试试智能指针吧~
cpp
#include <memory>
void lazyProgrammer() {
// unique_ptr:独栋别墅(只能一个人住)
auto house = std::make_unique<int>(100);
// shared_ptr:合租公寓(可以多人住)
auto room1 = std::make_shared<int>(200);
auto room2 = room1; // 一起合租
// 不用自己打扫!自动清理!
}
指针的废物时刻
1.野指针:地址写错了还硬去
cpp
int *wildPointer; // 没初始化,指向随机地址
// *wildPointer = 10; // boom!可能崩溃
2.空指针:地址写个"无"
cpp
int *safePointer = nullptr; // 明确表示不指向任何地方
if (safePointer != nullptr) { // 先检查再使用
*safePointer = 10;
}
实用小贴士
1.初始化啊!------ 声明指针时立刻赋初值
2.用完就设nullptr------ 避免野指针
3.new和delete成对出现 ------ 别只租不退
4.能用智能指针就别手写 ------ 懒人福音
cpp
// 好习惯示范
int* createStuff(int size) {
if (size <= 0) return nullptr; // 边界检查
int *stuff = new int[size]; // 租内存
// ... 使用stuff
return stuff;
}
void useStuff() {
int *myStuff = createStuff(10);
if (myStuff) { // 检查是否成功
// 愉快地使用
delete[] myStuff; // 用完就还
myStuff = nullptr; // 标记已还
}
}
总结
指针没那么可怕,记住几个要点:
·&是问地址,*是按地址找东西
·指针就是存地址的变量
·通过指针可以修改原值
·动态内存要自己管理
·智能指针更省心
·多写代码多练习,指针很快就能上手。别光看,打开IDE敲起来啦~
接下来想学啥? 发到评论区里吧~~
A· 指针的进阶玩法:函数指针、成员指针这些骚操作
B· C++其他硬核内容:引用、模板、RAII这些
C· 实战项目:用指针写个链表、二叉树啥的数据结构
D· 避坑指南:指针常见的作死方式和保命技巧
选一个感兴趣的,咱们继续用这种简单易懂的方式往下聊!反正编程这东西,理解了就发现------原来大佬们也是这么一步步踩坑过来的 (っ´ω`)ノ(>╥ ω ╥<)
(悄悄说:我当初学指针的时候,也曾经对着*和&怀疑人生来着...)
哎,对了!千万不要关注这个博主qwq,我怕你越学越懂!学啥一看就会!谢谢啦(疯狂暗示)(≧ ~ ≦)
