首页 > 其他分享 >关于难难难的指针(基础版)

关于难难难的指针(基础版)

时间:2024-03-16 14:58:26浏览次数:27  
标签:arr 变量 难难 assert 地址 关于 数组 指针

  指针指针难难难!!!那么我们在对指针进行一个比较深入的理解之前,我们应该对指针所学的知识模块做一个基础的了解。

内存和地址指针变量和地址指针的运算野指针assert断言
指针访问数组一维数组传参二级指针指针数组冒泡排序
字符指针变量数组指针变量函数指针变量函数指针数组转移表

以上是目前我学习到的。要了解指针,我们可以先类比理解一个概念:内存单元的编号==地址==指针,这个可以帮助我们了解什么是指针。如何得到地址?这里我们引入了新的符号:&(取地址符)。通过取地址符(&)拿到的地址是⼀个数值,这个数值有时候也是需要存储起来,⽅便后期再使⽤。这个地址就要存放在指针变量中,它是用来存放地址的。例如:

int a=999;
int *p=&a;

在这里面,int是p的指向类型,*旨在说明p是一个指针变量。注意指针变量的类型和大小是无关的。在指针类型中,有一种特殊的void*型,这种类型的指针可以⽤来接受任意类型地址。但是也有局限性:void* 类型的指针不能直接进⾏指针的加减整数和解引⽤的运算。

  const修饰变量,我理解来说就是让变量一直处于设置的初值不变。但是在指针变量当中,const如果放在*的左边,修饰的是指针指向的内容,保证指针指向的内容不能通过指针来改变。 但是指针变量本⾝的内容可变。 const如果放在*的右边,修饰的是指针变量本⾝,保证了指针变量的内容不能修改,但是指针指向的内容,可以通过指针改变。

  野指针就是指针指向的位置是随机的,不可预知的。那么我们如何避免野指针的出现?这时候,如果我们直接知道指针指向哪里就直接赋值,如果我们不知道,就可以直接给指针赋值NULL。例如:

int *p=NULL 
//或者
#define NULL ((void *)0)

  assert.h 头文件定义了宏 assert() ,⽤于在运⾏时确保程序符合指定条件,如果不符合,就报错终止运⾏。这个宏常常被称为“断⾔”。但assert的缺点是增加了程序运行的时间。一般我们可以在Debug中使用,在Release版本中选择禁用assert就行。

 我们常常把指针和数组联系到一起。我们要知道,数组名就是数组首地址(第一个元素)的地址。如果我们定义一个数组:int arr[10],在编辑的时候我们会发现:arr==&arr[0]==&arr;但是如果我们在他们的基础上分别+1,就会发现arr和arr+1前后相差了40个字节,因为arr+1是相当于跳过了整个数组。而&arr和&arr+1只相差了四个字节。

  结合着以上的特点,我们可以用指针访问数组了!!!综合以上的知识点,我们可以对指针有一个初步的理解。我们要了解指针和数组之间建立的关系并合理运用,也要知道野指针的危险性,还有assert的优缺点。基于此,才能对后续指针的学习有更好的理解。

标签:arr,变量,难难,assert,地址,关于,数组,指针
From: https://blog.csdn.net/2303_81468851/article/details/136687763

相关文章

  • 关于软件项目开发的分析与设计
    小组第二周作业https://files.cnblogs.com/files/blogs/819035/小组第二周作业.rar?t=1710550848&download=true小组第三周作业https://files.cnblogs.com/files/blogs/819035/小组第三周作业.rar?t=1710551738&download=true第三周作业一视频分享链接:https://pan.baidu.com......
  • 线上关于SimpleDateFormat踩坑记录
    问题描述importjava.text.ParseException;importjava.text.SimpleDateFormat;publicclassTestSimpleDateFormat{publicstaticvoidmain(String[]args){System.out.println(isValidDate("0229","MMdd"));//falseSystem.o......
  • 二分与双指针
    目录一.二分1.二分模板2.什么情况下能用到二分?(时间复杂度是O(logn))1.在一个有序数组中,找某个数是否存在2.在一个有序数组中,找>=某个数最左侧的位置3.局部最小值的问题3.二分使用方法4.例题(注重理解!!!)二.双指针一.二分会二分首先得会二分模板吧1.二分模板typedeflo......
  • 关于easyExcel导出文字合并居中和服务器导出失败踩了一天的坑
    参考:https://blog.csdn.net/hanyi_/article/details/118117484,https://blog.csdn.net/sunyuhua_keyboard/article/details/125482353,https://lhalcyon.com/alpine-font-issue/,https://github.com/alibaba/easyexcel/issues/1476(没字体) 首先吧,因为每周列会需要看用户使用情况报......
  • 用A*算法设计搜索策略,补全关于下列走迷宫问题的程序
    补全下列关于走迷宫的程序:classNode():#TODO:完成结点类的定义,结点中要包含状态、父结点、算符等必要成员。根据算法需求,还可能包含该结点的路径代价、启发函数值、估计代价等信息def__init__(self,state,parent,action,stepCost,hCost):self.st......
  • 在LINUX下,关于文件读写的操作
    对于我在做EMS的项目中需要把关键数据要保存下来,之前采用将关键数据保存在EMMC当中,结果发现会导致系统崩溃,所以还是采用将数据存储在文件的方法。下面是文件的相关操作//在嵌入式系统中,可以使用标准C库提供的文件操作函数来进行文件的读、写和删除操作。下面是对应的实现方......
  • 关于鸡蛋的10个真相
    每天吃一颗鸡蛋,有助于降低心血管疾病发病和死亡的风险。鸡蛋富含优质蛋白,氨基酸构成更好,容易被人体吸收利用。全蛋的蛋白质吸收利用率甚至比牛奶、肉类更高。鸡蛋中的卵磷脂、卵黄素等,对神经系统和身体发育有很大作用。如果想促进大脑发育、提升记忆力,与其花钱买保健品,不如早餐一......
  • 关于矩阵的相关运算
    定义肥肠的简单即将矩阵作为一个整体进行加减乘(包括快速幂)等的运算操作对,没有除至于为什么我不会告诉你是因为huge没有讲的不过对于除法我们可以通过增广原除数矩阵再进行高斯消元balabala的操作求得除数矩阵的逆矩阵再将被除数矩阵乘上除数矩阵的逆矩阵得到ans矩阵我们......
  • 【vue3】关于ref、toRef、toRefs
    1.ref函数,可以把简单数据类型包裹为响应式数据(复杂类型也可以),注意JS中操作值的时候,需要加.value属性,模板中正常使用即可2.toRef函数的作用:转换响应式对象中某个属性为单独响应式数据,并且转换后的值和之前是关联的(ref函数也可以转换,但值非关联)3.toRefs函数的作用:转换响......
  • vs关于窗体的应用程序如何开启控制台窗口的方式
    方式一:(推荐)属性->生成后事件添加以下指令:editbin/SUBSYSTEM:CONSOLE$(OutDir)$(ProjectName).exe方式二:(动态方式)//分配一个新的控制台窗口 AllocConsole(); SetConsoleTitle(("DebugOutput"</......