指针函数:从入门到精通

最近流感高发....

各位宝子都要多穿点衣服、带好口罩哦

我先躺板板了..... ρ(-ω-、)ヾ

最近想换一种说话风格,听说能涨粉(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;  // 记下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.newdelete成对出现 ------ 别只租不退

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敲起来啦~


接下来想学啥? 发到评论区里吧~~

指针的进阶玩法:函数指针、成员指针这些骚操作

C++其他硬核内容:引用、模板、RAII这些

实战项目:用指针写个链表、二叉树啥的数据结构

避坑指南:指针常见的作死方式和保命技巧

选一个感兴趣的,咱们继续用这种简单易懂的方式往下聊!反正编程这东西,理解了就发现------原来大佬们也是这么一步步踩坑过来的 (っ´ω`)ノ(>╥ ω ╥<)

(悄悄说:我当初学指针的时候,也曾经对着*和&怀疑人生来着...)

哎,对了!千万不要关注这个博主qwq,我怕你越学越懂!学啥一看就会!谢谢啦(疯狂暗示)(≧ ~ ≦)

相关推荐
~无忧花开~3 小时前
JavaScript实现PDF本地预览技巧
开发语言·前端·javascript
靠沿3 小时前
Java数据结构初阶——LinkedList
java·开发语言·数据结构
4***99743 小时前
Kotlin序列处理
android·开发语言·kotlin
froginwe113 小时前
Scala 提取器(Extractor)
开发语言
t***D2643 小时前
Kotlin在服务端开发中的生态建设
android·开发语言·kotlin
Elias不吃糖4 小时前
LeetCode每日一练(209, 167)
数据结构·c++·算法·leetcode
Want5954 小时前
C/C++跳动的爱心②
c语言·开发语言·c++
铁手飞鹰4 小时前
单链表(C语言,手撕)
数据结构·c++·算法·c·单链表