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

指针(一)

指针基础

在C++中,指针是至关重要的组成部分。它是C++语言最强大的功能之一,也是最棘手的功能之一。

指针具有强大的能力,其本质是协助程序员完成内存的直接操纵

指针:特定类型数据在内存中的存储地址,即内存地址。

指针只是一个逻辑概念,其实际应用是:指针变量,如,变量p就是指针变量。

指针变量的定义语法:

1.先声明,后赋值:

int num = 10;int* p;
p = #

2.声明和赋值同步:

int num = 10;
int* p = &num

变量类型(如上int)表示,指针(内存地址)指向的内存区域,存放的是整型数据

*符号有两种含义:

  - 声明时:*p,表示变量p,是指针变量(存的是内存地址)

  - 使用时:*p,表示取指针p执行内存区域的数据

cout << p;  //输出num变量地址
cout << *p; //输出数据10

&符号表示取变量内存地址,是一个取内存地址的单目操作符

细节

说明

示例

指针变量类型

说明指针指向区域的数据类型

int *p; 指针指向区域存放int

*符号,在声明

指代变量为指针变量

int * p;

*符号,在使用

取指针指向内存区域的数值

*p 表示数字10

&符号

取内存地址

&num,取num变量内存地址

野指针

野指针:被声明但未初始化(赋值)的指针。这个指针会指向随机的内存空间,可能导致未知问题。

野指针:仅声明未赋值的指针。不可应用,因为其指向的内存区域是随机的、未知的。

普通变量是对数值进行操作,不会有安全问题,所以没有“野变量”一说。

指针对内存直接操作,所以一旦声明但未赋值,就是“野指针”,一旦使用,后果不可预料。

int * p;    // 声明指针(分配了8字节空间), p是野指针因为未被赋值
*p = 10;    // 将10赋予指针p所指向的空间//*p = 10; 是向未知的、随机的4字节内存区域,修改存储值为10

空指针

为避免野指针,应养成良好的变成习惯,及时初始化,或将指针置为空指针更为安全。

int* p = NULL;
int* p = nullptr;
•NULL是C++内置的宏,表示”空、什么都没有”的含义,其本质是0
•nullptr是C++11标准引入的关键字,表示指针为空

空指针,只在需要指针,但需要延迟赋值的场景下作为过渡使用。

空指针:将指针赋值为“空”:NULL、nullptr,避免指向具体内存,更加安全

空指针也不是正常的指针,只是过渡,指针最终要给与具体值,否则就不要用指针。

http://www.lryc.cn/news/383028.html

相关文章:

  • harmony鸿蒙下实现bc交互的方式和方法
  • 【MySQL进阶之路 | 高级篇】索引的声明与使用
  • 探索Java中的设计模式:从单例到工厂模式
  • 表单(forms)
  • Geoserver源码解读四 REST服务
  • 硬件开发笔记(二十一):外部搜索不到的元器件封装可尝试使用AD21软件的“ManufacturerPart Search”功能
  • 【AI大模型】GPTS 与 Assistants API
  • 攻击者开始使用 XLL 文件进行攻击
  • Why RAG is slower than LLM?
  • Word页码设置,封面无页码,目录摘要阿拉伯数字I,II,III页码,正文开始123为页码
  • 汽车汽配图纸管理、产品研发管理解决方案
  • 小程序简单版音乐播放器
  • 驾校预约管理系统
  • C++ 左值右值 || std::move() || 浅拷贝,深拷贝 || 数据类型
  • 发那科机器人IO 分配
  • ubuntu开机怎么进入、退出命令行界面
  • 『FPGA通信接口』LVDS接口(4)LVDS接收端设计
  • 面试题:HTTP的body是二进制还是文本
  • 5分钟带你部署一套Jenkins持续集成环境​
  • OpenAI突然宣布停止向中国提供API服务!
  • Bootstrap 标签
  • EtherCAT主站SOEM -- 37 -- win-soem-win10及win11系统QT-SOEM-1个电机转圈圈-周期同步速度模式(CSV模式)
  • 老板舍不得买库存管理软件❓一招解决
  • 【MySQL数据库】:MySQL视图特性
  • malloc、free和new delete的区别
  • 如何有效地优化 Erlang 程序的内存使用,以应对大规模数据处理的需求?
  • vue3项目使用@antv/g6实现可视化流程功能
  • 【Linux网络(一)初识计算机网络】
  • Vulhub——Log4j、solr
  • linux 设置程序自启动