指针函数:从入门到精通

最近流感高发....

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

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

最近想换一种说话风格,听说能涨粉(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,我怕你越学越懂!学啥一看就会!谢谢啦(疯狂暗示)(≧ ~ ≦)

相关推荐
初恋叫萱萱9 小时前
构建高性能生成式AI应用:基于Rust Axum与蓝耘DeepSeek-V3.2大模型服务的全栈开发实战
开发语言·人工智能·rust
cyforkk10 小时前
12、Java 基础硬核复习:集合框架(数据容器)的核心逻辑与面试考点
java·开发语言·面试
我材不敲代码14 小时前
Python实现打包贪吃蛇游戏
开发语言·python·游戏
身如柳絮随风扬15 小时前
Java中的CAS机制详解
java·开发语言
-dzk-16 小时前
【代码随想录】LC 59.螺旋矩阵 II
c++·线性代数·算法·矩阵·模拟
韩立学长16 小时前
【开题答辩实录分享】以《基于Python的大学超市仓储信息管理系统的设计与实现》为例进行选题答辩实录分享
开发语言·python
froginwe1116 小时前
Scala 循环
开发语言
m0_7066532317 小时前
C++编译期数组操作
开发语言·c++·算法
故事和你9117 小时前
sdut-Java面向对象-06 继承和多态、抽象类和接口(函数题:10-18题)
java·开发语言·算法·面向对象·基础语法·继承和多态·抽象类和接口
Bruk.Liu17 小时前
(LangChain实战2):LangChain消息(message)的使用
开发语言·langchain