首页 > 其他分享 >初识指针 3.0

初识指针 3.0

时间:2024-07-15 21:59:09浏览次数:13  
标签:函数 void 3.0 初识 数组 类型 函数指针 指针


前言

宝子们,想象一下你在一个大型的书库里找书。书库的书架上摆放着很多排书,每一排书架上都有很多本书。现在,你手里拿着一张地图(指针),这张地图告诉你每一排书架的具体位置。而书架上的每一本书(数组元素)都有自己的编号(索引)。今天这回咱们就来聊聊二维数组与指针之间的关系吧。


一、字符指针变量

首先我们先来介绍一下字符指针变量。字符指针变量顾名思义就是指针变量的类型是字符类型嘛,但是我们学习字符的时候,一个单独的字符和一个字符串之间是有差异的,现在到了指针的环节,两者依然存在差异

二、数组指针

在此之前,我们已经学过了一些基本类型的指针(整型指针,字符指针),现在咱们再来学习一种指针——数组指针,有了前面的基础,我们应该清楚的知道:数组指针就是指针变量指向数组的指针。我们要知道数组指针的类型是  int(*)[10] (指向的数组是一个长度为10的整型数组)

三、二维数组传参的本质

之前我们在间接输出一个一维数组的值时,我们经常通过定义一个函数,然后通过实参传递给形参最后输出。在前面初识指针的时候,咱们已经知道了,实参传给形参的其实是指针(用数组的形式写也是可以的,但是本质上还是指针),今天咱们学习的二维数组传参也有异曲同工之处。

四、函数指针

4.1 函数指针的初始化和解引用

现在我们已经学习了数组指针,那么我们平时也很常用的函数是否也有指针呢?是的,也有函数指针。在此之前,我们先说一个小细节,在数组中arr表示的是数组首元素地址,而&arr表示的是整个数组的地址。但是在函数之中,(例如Add()函数)Add与&Add 的地址是相同的

但是我们还有一点要注意

---------------------------------------------------------------------------------------------------------------------------------

和前面的数组指针一样,函数指针也是在函数的形式上做一些小改动得到的

这里再给函数指针变量的类型做一个小小的解释:在式子的最左边是这个指针指向的函数的类型,*必须放在中间里的括号内,最右边的括号内放的是函数参数的类型(注意:参数的类型,个数要与函数一致)。在调用函数的时候,我们也可以用指针的形式

4.2 函数指针数组

在编写一个程序的时候,如果遇到许多个相似的函数时,当我们定义好函数时,再去一一调用,想想是不是很麻烦?有没有办法把这些函数都放在一个数组里面,然后再遍历使用,那样不是方便许多了嘛。接下来,我们再来学习一个函数指针数组

4.3 两个与函数指针有关的有趣代码

第一眼看到这串代码,心想这是啥子玩意啊,不知道从哪里下手,注意作为一名合格的程序猿,要时刻保持冷静。

这串代码,咱们可以层层剥开分析:首先我们可以看中间的 void (*)()这就是咱们刚刚学习的指针变量类型
( void (*)() )0,这是一个强制类型转换,这里的数字0就是一个地址0
*( void (*)() )0, 是将函数类型指针解引用之后就是一个函数了
最后我们可以看出( *( void (*)() )0 ) ()是一个函数调用(形如Add() )

这个代码相较于上面那个代码是不是更加清楚一点呢,但是我们也不能掉以轻心,也要认真分析

这串代码,咱们来层层分析:中间的signal(int, void(*)(int))是一个有两个参数的函数(只有函数名与函数参数,那么函数类型就是前面的)
由上面的分析,咱们将void (*)(int)拿出来,可以清楚地看到这是一个函数指针类型
故我们可以得出结论:这是一个以signal为函数名,void(*)(int)为函数类型的函数声明

ps:在一个函数中,函数一般有三个作用:函数定义,函数声明,函数调用。以后我们分析函数的时候可以从这三个方面考虑

4.4 typedef关键字

现在学习了指针之后,不知道你们是否觉得现在那些类型的名字实在太长,那些开发者可能也有相同的感觉,于是他们又发明了一个关键字——typedef。它是用来类型重命名的,可以将复杂的类型,简单化。

老规矩,最后咱们再来介绍一个函数指针数组的小妙用——转移表


标签:函数,void,3.0,初识,数组,类型,函数指针,指针
From: https://blog.csdn.net/H2X7_/article/details/140423548

相关文章

  • 初识指针 1.0
    前言各位宝子们,想象一下你家的信箱。信箱里装着各种信件和包裹,每个信箱都有一个唯一的地址。现在,你手里拿着一张纸条,上面写着某个信箱的地址。这张纸条就像是指针,它并不是信件本身,而是告诉你在哪里可以找到这个信件。在计算机编程中,变量就像是那些放在信箱里的信件或包......
  • AcWing 2074:倒计数 ← 双指针算法
    【题目来源】https://www.acwing.com/problem/content/2076/【题目描述】艾弗里有一个由N个正整数构成的数组。数组中的第i个整数是Ai。如果一个连续的子数组的长度为m,并且按顺序包含整数m,m−1,m−2,…,2,1,则称它为m倒计数。例如,[3,2,1]是3倒计数。请帮助艾......
  • 双指针 & 双向搜索
    双指针根据人类直觉这个东西需要满足单调性,所以预处理的时候大概率需要排序。好像常与二分结合使用?可以用在序列、链表(存储位置)或者树、图上(存储结点)。或者用于其他算法(eg:单调队列、差分),还有主播没学过的莫队。正题顾名思义双指针是两个指针,通常是外层一个内层一个(依靠相对......
  • 小白初识之C语言二
    重构:不增加代码功能,对代码结构的调整和优化,为了维护和拓展1.流程控制-顺序结构-分支结构(判断\选择)-循环结构2.分支-if-ifelse(三元运算替代)-ifelseifelseifelse(多路分支)-switch-case多路分支,有限,简洁3. 数组-一个标识符,存储多个值(大小是......
  • 初识PCB过孔
    PCB过孔:连接电路世界的微小桥梁在电子制造业的浩瀚星空中,PCB(PrintedCircuitBoard,印刷电路板)无疑是那颗最耀眼的星辰之一。作为电子设备的核心组成部分,PCB承载着电子元器件的互联与通信重任。而在这错综复杂的电路网络中,PCB过孔(Via)则扮演着至关重要的角色,它们如同微小的桥......
  • 初识铺铜与切铜
    铺铜和切铜是PCB(PrintedCircuitBoard,印刷电路板)设计中的两个重要步骤,它们各自具有特定的目的和操作方法。铺铜定义:铺铜是指在PCB电气层上添加整块的铜皮,用以填充没有布线的区域或闲置的空间。这些铜区也被称为灌铜或敷铜。铺铜是PCB设计中的一个重要环节,对于提高电路板......
  • C语言指针
    指针引用与指针引用&指针*必须初始化可以不初始化不能为空可以为空不能更换目标可以更换目标初始化案例int&r;//不合法,没有初始化引用int*p;//合法,但p为野指针,使用需要小心(1)是否需要初始化由于引用不能为空,所以我们在使用引用的时候......
  • 数组002 一维数组与指针
    #include<iostream>usingnamespacestd;//1、指针的算术://将一个整型变量加1后,其值将增加1。//但是,将指针变量(地址的值)加1后,增加的量等于它指向的数据类型的字节数。////2、数组的地址//2.1数组在内存中占用的空间是连续的。//......
  • 【JVM_01】——初识JVM运行流程
    目录1-引言:初识JVM1-1JVM是什么?(What)1-1-1概念1-1-2优点1-2为什么学习JVM?(Why)2-核心:JVM工作的原理(How)⭐2-1JVM的组成部分及工作流程2-2学习侧重点3-小结(知识点大纲):3-1JVM组成3-2类加载器3-3垃圾回收3-4JVM实践1-引言:初识JVM1-1JVM是什么?(......
  • C语言指针超详解——强化篇
    C语言指针系列文章目录入门篇强化篇文章目录C语言指针系列文章目录1.assert断言2.指针的使用和传址调用2.1strlen的模拟实现2.2传值调用和传址调用3.数组名的理解4.使用指针访问数组5.一维数组传参的本质6.冒泡排序7.二级指针8.指针数组9.指针数组模拟......