C/C++指针详解

news2024/10/1 19:31:28

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

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

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

     ⼀个⽐特位可以存储⼀个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,这样就可以有效避免野指针的的形成。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity ShaderGraph实现地面积水效果

先看看效果 右侧参数,能够控制水高,波纹的速度等,但是这个效果需要修改高度图和凹凸图,毕竟有些模型并不是平面,对于具有斜面的模型就需要修改贴图。 ShaderGraph如下

STM32CubeIDE基础学习-STM32CubeIDE软件程序仿真调试

STM32CubeIDE基础学习-STM32CubeIDE软件程序仿真调试 前言 一般编写完程序后都会进行编译,看结果是否有存在语法错误,确认没有语法错误之后再进行代码的下载观察硬件执行是否和软件编程预期的结果一致,如果发现硬件执行达不到预期现象&#…

PHP 高仿抖音滑动H5随机短视频源码

源码名称:高仿抖音滑动H5随机短视频源码 源码介绍:一款带后台的高仿抖音滑动H5随机短视频源码,带打赏功能。支持之定义视频源,可设置本地读取播放源或站外的API播放源链接。支持点击跳转联系QQ或微信。支持广告弹窗,可…

如何使用固定公网地址SFTP远程传输文件至安卓Termux本地目录?

文章目录 1. 安装openSSH2. 安装cpolar3. 远程SFTP连接配置4. 远程SFTP访问4. 配置固定远程连接地址 SFTP(SSH File Transfer Protocol)是一种基于SSH(Secure Shell)安全协议的文件传输协议。与FTP协议相比,SFTP使用了…

主升浪趋势票如何去做,看完这2个例子就可以终结了

我们在这个市场是否能持续赚钱不被淘汰取决于我们自身迭代速度,向市场学习本身就是向市场资金共识方向靠拢,接近客观,远离个人偏见的主观。看清这一点,你才有可能性,否则连可能性都不会有。 在上述问题中,虽…

数字化审计智慧

简析内部审计数字化转型的方法和路径 内部审计是一种独立的、客观的确认和咨询活动,包括鉴证、识别和分析问题以及提供管理建议和解决方案。狭义的数字化转型是指将企业经营管理和业务操作的各种行为、状态和结果用数字的形式来记录和存储,据此再对数据进…

实验三 虚拟内存管理-实验部分

目录 一、知识点 1、虚拟存储 1.1、虚拟存储需求 1.2、虚拟存储的局部现象 1.3、虚拟页式存储管理 1.4、虚拟页式存储管理总流程 2、页面置换算法 2.1、页面置换算法的概念 2.2、常见的局部页面置换算法 3、虚拟存储管理实现分析 3.1、总体流程介绍 3.2、关键数据结…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:RotationGesture)

用于触发旋转手势事件,触发旋转手势的最少手指为2指,最大为5指,最小改变度数为1度。 说明: 从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 接口 RotationGesture(value?: …

【Python】time模块

专栏文章索引:Python 目录 一、介绍​编辑 二、常用函数​编辑 一、介绍 Python 的 time 模块提供了处理时间的函数。 二、常用函数 1.time():返回当前时间的时间戳(从1970年1月1日开始计时的秒数)。 import timecurrent_ti…

C语言从入门到熟悉------第一阶段

本文介绍 本文创作参考如下图书: 本书作者:吴明杰、曹宇、吴丹。 ISBN:9787111553076 计算机语言发展的三个阶段 先来看计算机语言的发展主要分为如下图三个阶段。 C语言的优点 C语言的优点有三个: 1)代码量小。 …

2024年装修新潮流,你get到了吗?福州中宅装饰,福州装修

在装修这个行业,每年都会出现一些新的设计理念和流行趋势,同时也存在一些传统的设计理念。今天,我们就来对比一下2024年装修设计的传统与新趋势。 传统设计理念 1. 落地电视柜 在过去,落地电视柜被认为是一种实用的设计&#xf…

C++椭圆检测论文复现 Ubuntu 22.04+Vscode+opencv3.4

复现的代码 本博客旨在复现论文《An Efficient High-quality Ellipse Detection》,该文章本来只有Matlab的代码实现,后来被islands翻译成了c 库,大家可以参考islands发在知乎上的文章高质量椭圆检测库,C的代码链接。 使用环境 U…

java SSM流浪宠物救助与领养myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM流浪宠物救助与领养管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系…

Linux内存管理--系列文章壹

一、引子 作者、我在上班闲着没事的时候,看了一些关于Linux内存管理和程序装载、链接的文章,然后自己就总结出了一些东西。 本系列文章一方面将资料中的长篇大论总结到最少、以方便可以直接找到答案,一方面也是方便面试的时候可以吹牛逼。 L…

从 Language Model 到 Chat Application:对话接口的设计与实现

作者:网隐 RTP-LLM 是阿里巴巴大模型预测团队开发的大模型推理加速引擎,作为一个高性能的大模型推理解决方案,它已被广泛应用于阿里内部。本文从对话接口的设计出发,介绍了业界常见方案,并分享了 RTP-LLM 团队在此场景…

Spring-AOP基础(全在这里)

八股文部分来源于网络,例子为原创 OOP(Object-oriented programming) 也就是面向对象编程,继承,封装,多态。 局限性 静态语言:类结构一旦定义,不容易被修改(并不是无法修改)。只能侵入性扩展&#xff1a…

C语言 --- 指针(5)

目录 一.sizeof和strlen对比 1.sizeof 2.strlen 3.strlen 和sizeof的对比 二.数组和指针笔试题目详解 回顾:数组名的理解 1.一维数组 2.字符数组 代码1: 代码2: 代码3: 代码4: 代码5: 代码6&am…

《JAVA与模式》之门面模式

系列文章目录 文章目录 系列文章目录前言一、医院的例子二、门面模式的结构三、门面模式的实现四、门面模式的优点五、门面模式在Tomcat中的使用前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,…

【论文阅读】OpsEval

粗糙翻译,如有兴趣请看原文,链接:https://arxiv.org/abs/2310.07637 摘要 信息技术(IT)运营(Ops),特别是用于IT运营的人工智能(AlOps),是保持现…

改进沙猫群优化的BP神经网络ISCSO-BP(时序预测)的Matlab实现

改进沙猫群优化的BP神经网络(ISCSO-BP)是一种结合了改进的沙猫群优化算法(Improved Sand Cat Swarm Optimization, ISCSO)和反向传播(Back Propagation, BP)神经网络的模型,旨在提高时序预测的准…