C/C++指针详解

      接下来我们来介绍一下什么是指针?  指针其实就是元素存放地址,更加形象的比喻:在酒店中如果你想要去注必须去付费不然不能住,在计算机也同样如此(但是不需要付费哦)每当我们使用一个变量或其他需要申请空间的时候计算机就会自动开辟一段空间也就相当于酒店中每一个房间都有一个固定的房间号,在对应的房间号内可以找到固定的人,同样在正确的内存空间内也可以找到对应的数据,如果你想找的数据不在这一空间那么无论如何也是找不到得。

     就跟找门牌号一样找地址也可以提高寻找效率(要不然一个一个找该有多慢啊)

      计算机常见单位的(补冲):

     ⼀个⽐特位可以存储⼀个2进制的位1或者0

         

          我们知道计算上CPU(中央处理器)在处理数据的时候,需要的数据是在内存中读取的,处理后的数 据也会放回内存中,那我们买电脑的时候,电脑上内存是8GB/16GB/32GB等,那这些内存空间如何高效的管理呢?
其实也是把内存划分为⼀个个的内存单元,每个内存单元的大小取一字节。
     因此我们可以理解为: 内存单元的编号 == 地址 == 指针
      1. 指针变量和地址
     取地址操作符&
              理解了数据与内存之间的关系下面我们来介绍如何查看数据的地址:

     在这里我们将100赋值给a,&这个符号可以将a的地址取出在经过cout函数进行打印输出我们就可以产看a的地址。

     地址的用处当然不止于此通过地址我们也可以改变量中的值,但是在这之前我们需要先介绍什么是指针变量?

     顾名思义指针变量就是存放指针的变量,它可以存放其他变量元素在内存空间中的地址,在这里需要特别注意的是指针变量本身也是有地址的只不过它的地址中存放的数值是其他数据的内存空间。

        下面我们来介绍指针变量的使用方法:

int a = 100;

int* p = a;

   在这里int*就是指针的类型如果我们要改变a的值只需对指针p进行解引用操作也就是:

*p = 12; 

此时a的值也为12,我们一般使用指针用与函数传参时的使用,众所周知形参只是对实参的一份临时拷贝改变形参无法改变实参的值,因此在这里我们用指针来完成这个操作,由于指针进行解引用操作时直接访问该元素的地址因此*p的改变可以影响到a。

       整形指针的写法是这样其他数据类型的指针使用方法也可以得知:

long      long*    double   double* float  float* short    short* 

      不同的数据类型的使用是一致的,我们只需照葫芦画瓢就可以。

      下面我们来介绍一下什么是数组指针,大家猜一下它究竟是数组还是指针呢?数组指针无论名字怎样它还是指针,是一个存放数组的指针,下面我们就来介绍它的基本使用方法;

 

void test() {
    int arr1[5] = { 1,2,3,4,5 };
    int arr2[5] = { 6,7,8,9,10 };
    int* num[2] = { arr1,arr2 };
}
int main() {

    test();
    return 0;
}

      指针数组的用法同数组一般无二,num也是储存的首地址,但是不同的是访问时需要进行解引用操作:

 

 这样就可以访问数组指针中的元素了。当然这两个解引用的意思是有一定的差异的,第一个*截取的是数组的首地址也就是arr1第二个则是截取arr1中的第二个元素。

      接下来我们来讲解const修饰指针:

           const修饰指针有两种方法一种是前置一种是后置:

      第一种写法表示指针p1的指向可以改变但是指针的数值不能发生改变,第二种表示指针的指向可以不可以发生改变,但指针的值可以发生改变。

       接下来我们来简要介绍野指针:

   野指针的定义有三种:1.指针未初始化   2.指针的越界访问

        显而易见如果我们想要规避野指针我们必须避开这两项,因此我们在使用数据数据时要避免访问越界 ,在定义指针时如果我们不知道该指向什么那么就把他定义为NULL,这样就可以有效避免野指针的的形成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/445232.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

三、N元语法(N-gram)

为了弥补 One-Hot 独热编码的维度灾难和语义鸿沟以及 BOW 词袋模型丢失词序信息和稀疏性这些缺陷,将词表示成一个低维的实数向量,且相似的词的向量表示是相近的,可以用向量之间的距离来衡量相似度。 N-gram 统计语言模型是用来计算句子概率的…

数据结构(二)——线性表(双链表)

2.3.3 双链表 单链表:单链表结点中只有一个指向其后继的指针,使得单链表只能从前往后依次遍历,无法逆向检索,有时候不太方便 双链表的定义:双链表结点中有两个指针prior和next,分别指向其直接前驱和直接后继 表头结点…

Jmeter---非GUI命令行的执行生成报告、使用ant插件执行接口测试脚本生成报告

非GUI命令行的执行 1. 在jmx后缀的文件目录下打开命令行 2. 运行: jmeter -n -t filename.jmx(-n : 非GUI的方式 -t: 指定需要执行的脚本) 生成jtl报告 运行: jmeter -n -t filename.jmx -l result_filename.jtl 生成html报…

C语言笔记:文件的操作各种文件函数讲解

突然发现自己的C语言文件部分还没有学,赶紧来补一下~~ 1.文件分类 文本文件磁盘文件(二进制文件)C语言特殊文件标识:stdin(标准输入:通指键盘输入),stdout(标准输出&am…

基于SpringBoot的招聘网站

基于jspmysqlSpring的SpringBoot招聘网站项目(完整源码sql) 博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》…

网络编程总结

文章目录 1.浏览器输入一个 url 中间经历的过程2.TCP,UDP 的区别3.HTTP 协议HTTP 协议有哪些部分组成?响应状态码GET 和 POST 的区别什么是幂等的什么是 HTTP 的长链接cookie 和 session 的区别TCP socket 编程原理 4.IO 多路复用五种 IO 模型如何提升服务器的并发能…

Ubuntu 基本操作-嵌入式 Linux 入门

在 Ubuntu 基本操作 里面基本就分为两部分: 安装 VMware 运行 Ubuntu熟悉 Ubuntu 的各种操作、命令 如果你对 Ubuntu 比较熟悉的话,安装完 VMware 运行 Ubuntu 之后就可以来学习下一章节了。 1. 安装 VMware 运行 Ubuntu 我们首先来看看怎么去安装 V…

2.4_4 死锁的检测和解除

文章目录 2.4_4 死锁的检测和解除(一)死锁的检测(二)死锁的解除 总结 2.4_4 死锁的检测和解除 如果系统中既不采取预防死锁的措施,也不采取避免死锁的措施,系统就很可能发生死锁。在这种情况下,…

通过Annotation将用户操作记录到数据库表功能实现

一、背景 在用户对我们所开发的系统访问的时候,需要我们的系统具有强大的健壮性,使得给与用户的体验感十足。在业务开发的过程中,我们通过将几个相关的操作绑定成一个事件,使得安全性以及数据的前后一致性得到提高。但是在溯源方面…

Linux第74步_“设备树”下的LED驱动

使用新字符设备驱动的一般模板,以及设备树,驱动LED。 1、添加“stm32mp1_led”节点 打开虚拟机上“VSCode”,点击“文件”,点击“打开文件夹”,点击“zgq”,点击“linux”,点击“atk-mp1”&am…

三角形费马点及深入拓展

三角形费马点及深入拓展 一、费马点的定义 三角形内部满足到三个顶点距离之和最小的点,称为费马点。 二、费马点的证明 比较麻烦的一件事情是,当我们考虑一个三角形的费马点时,我们需要将三角形分为两类: ①三个内角均小于120的三角形 ②有…

【SQL】185. 部门工资前三高的所有员工(窗口函数dense_rank();区分rank()、row_number())

前述 推荐阅读:通俗易懂的学会:SQL窗口函数 题目描述 leetcode题目 185. 部门工资前三高的所有员工 思路 先按照departmentId分组,再按照salary排序 >窗口函数dense_rank() over() select B.name as Department,A.name as Employee,A…

Python 初步了解urllib库:网络请求的利器

目录 urllib库简介 request模块 parse模块 error模块 response模块 读取响应内容 获取响应状态码 获取响应头部信息 处理重定向 关闭响应 总结 在Python的众多库中,urllib库是一个专门用于处理网络请求的强大工具。urllib库提供了多种方法来打开和读取UR…

试用期自我总结报告10篇

试用期自我总结报告(篇1) 一转眼试用期的时间飞快就过去了,在这段时间里我学习到了很多,也把自己在过去学习的东西得已融会贯通。能够来到幼儿园里成为一名老师是我一直以来的目标,而我也终于完成了自己的目标&#x…

Springboot+vue的医院药品管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频: Springbootvue的医院药品管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。 项目介绍: 采用M(model)V(view)C(controller&#xff09…

如何在RTMP推送端和RTMP播放端支持Enhanced RTMP H.265(HEVC)

技术背景 时隔多年,在Enhancing RTMP, FLV With Additional Video Codecs And HDR Support(2023年7月31号正式发布)官方规范出来之前,如果RTMP要支持H.265,大家约定俗成的做法是扩展flv协议,CDN厂商携手给…

React-Mock数据

1.概念 说明:React中使用Mock数据主要是为了模拟后端接口和数据,以便前端开发可以在没有实际后端支持的情况下进行。 2.实现步骤 2.1安装 npm i -D json-server 2.2准备json文件 {"list":[{"name":"李四","age&q…

【Python】进阶学习:OpenCV--一文详解cv2.namedWindow()

【Python】进阶学习:OpenCV–一文详解cv2.namedWindow() 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望…

编码器-解码器模型(Encoder-Decoder)

注意:本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 ([www.aideeplearning.cn]) 编码器-解码器模型简介 Encoder-Decoder算法是一种深度学习模型结构,广泛应用于自然语言处理(NLP)、图像处理…

mybatis-plus整合spring boot极速入门

使用mybatis-plus整合spring boot,接下来我来操作一番。 一,创建spring boot工程 勾选下面的选项 紧接着,还有springboot和依赖我们需要选。 这样我们就创建好了我们的spring boot,项目。 简化目录结构: 我们发现&a…