当前位置: 首页 > news >正文

C++指针入门:10分钟掌握核心用法

一、什么是地址?

程序运行时,所有变量都放在内存中,每一个字节都有一个编号,这个编号就是 “地址”

可以理解为:

  • 变量 = 房间
  • 变量值 = 房间里的人
  • 地址 = 房间号

查看变量地址用&取地址符

int a = 10; cout << &a << endl; // 输出 a 的地址,形如:0x61ff1c

二、什么是指针?

指针就是专门用来存放地址的变量

指针变量定义

类型名 *指针变量名;

示例:

int a = 10; int *p = &a; // p 是指针,存放 a 的地址
  • int *表示 “指向 int 类型变量的指针”
  • p里存的是地址
  • *p表示取指针指向的那个变量的值(解引用

三、两个核心符号

  1. &取地址:变量 → 地址
  2. *解引用:地址 → 变量本身
int a = 10; int *p = &a; cout << a; // 10 cout << *p; // 10,等价于 a *p = 20; // 通过指针修改 a cout << a; // 20

四、指针指向关系图解(易懂版)

a 变量空间 +---------+ | 10 | +---------+ ↑↑ || +---------+ | &a | p 指针变量 +---------+
  • p存的是a的地址
  • *p就是a本身
  • 修改*p= 修改a

五、指针的简单操作

int a = 100; int *p = &a; *p = 200; // a 变成 200 cout << *p; // 输出 200 cout << p; // 输出地址 cout << &p; // 指针变量自己的地址

六、指针与数组(超级常用)

数组名就是数组首元素的地址

int arr[] = {10,20,30,40}; int *p = arr; // 等价于 &arr[0]

访问数组元素两种写法:

arr[i] ←→ *(p + i)

遍历数组(指针版):

for(int i=0; i<4; i++){ cout << *(p+i) << " "; }

七、指针作为函数参数(传地址)

之前学的 “值传递” 不能修改实参,用指针传地址可以直接修改外面的变量!

示例:交换两个数

void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } int main() { int x = 10, y = 20; swap(&x, &y); // 传地址 // x=20 y=10 }

八、空指针与野指针

  1. 空指针:指向地址 0,表示不指向任何空间

    int *p = nullptr; // C++11 推荐
  2. 野指针:指向未知非法地址,极其危险

    int *p; // 没有初始化,野指针

原则:

  • 指针一定要初始化
  • 不用时置为nullptr

九、新手高频易错点

  1. 分不清&*
  2. 定义时int* pint *p一样,但int* p,q容易误解
  3. 野指针、空指针解引用导致程序崩溃
  4. 指针越界访问
  5. 函数传参时忘记传地址,以为能修改实参

十、今日重点总结

  1. &取地址,*解引用
  2. 指针 = 存地址的变量
  3. *p就是指针指向的变量本身
  4. 数组名 = 首地址,arr[i] ↔ *(p+i)
  5. 指针做函数参数可以直接修改实参
  6. 指针必须初始化,避免野指针
http://www.jsqmd.com/news/644564/

相关文章:

  • 2026年4月13隔夜暗盘挂单排行榜
  • 2026年性价比高自费出书机构有哪些:五家优选评测 - 科技焦点
  • 3分钟让你的Windows 11重获新生:Win11Debloat系统优化指南
  • ECMWF CDS API 深度解析:解锁气候数据获取的5个高效实践
  • 3个关键步骤:ComfyUI-Impact-Pack图像增强插件完整使用指南
  • 如何在Windows 10/11上完美运行经典老游戏:DDrawCompat兼容性解决方案终极指南
  • 暗黑破坏神2存档编辑新纪元:告别复杂十六进制,拥抱可视化操作
  • 利用GitHub Actions自动化测试RWKV7-1.5B-G1A模型更新
  • 2026 方形不锈钢水箱选型解析 304 不锈钢水箱厂家实力参考 - 深度智识库
  • ThinkPad风扇智能控制终极指南:告别噪音,拥抱高效散热
  • APK Installer终极指南:高效管理Android应用的Windows神器
  • NoFences桌面分区工具:开源免费的Windows桌面整理解决方案
  • 西门子S7-300与MMV变频器Profibus-DP通讯实战:从硬件接线到PID调速完整流程
  • 2026私域直播平台深度实测:盘点5款热门平台,哪个更适合你? - 轻松带微笑
  • League Akari:英雄联盟客户端全能工具包深度解析
  • 告别黑盒:用objdump -S命令,让Linux二进制文件反汇编时自动关联源代码
  • 暗黑2存档编辑器终极解决方案:深度技巧解析与完整实战指南
  • cv_unet_image-colorization生产环境部署:支持批量处理+日志记录+错误重试机制
  • 如何用d2s-editor轻松编辑暗黑破坏神2存档:完整免费指南
  • 2025届学术党必备的六大AI辅助论文网站实测分析
  • 2026年靠谱租车推荐:五大平台服务与保障解析 - 科技焦点
  • Cursor Pro功能完整解锁指南:突破AI编程助手限制的实用方案
  • Obsidian终极绘图解决方案:Draw.io插件深度配置指南
  • 开箱即用!Qwen3-VL-4B Pro镜像深度体验:Web界面美观,操作极简
  • 影刀RPA实战:5分钟搞定小红书自动评论,解放双手高效养号
  • SITS2026模型压缩实战手册(FP16+知识蒸馏+动态token剪枝三阶加速)
  • 如何在3分钟内为Unity游戏安装模组加载器:MelonLoader完整指南
  • QTTabBar多语言终极指南:如何让Windows资源管理器说你的语言
  • Hugging Face模型调用新姿势:用Google Colab免费GPU+4-bit量化,5分钟跑通Mistral-7B
  • 如何免费下载百度文库文档:实用高效工具指南