指针传2

几天没有写博客了,怎么说呢?这让我总感觉缺点什么,心里空落落的,你懂吧!

好了,接下来开始我们今天的正题!

 1. ⼆级指针 

我们先来看看代码:

首先创建了一个整型变量a,将a的地址取出来存放在p中,之后我们又创建了一个指针变量pp来取出p的地址进行存放,右边一个*表示pp是一个指针变量,左边的int*则表示pp所指向的对象类型是int*的。那么我们通过对pp的解引用也改变了a的值。

**pp 先通过 *pp 找到 ,然后对 进⾏解引⽤操作: *p ,那找到的是 a

2. 指针数组

什么是指针数组呢?我们可以类比得出,前面我们又整型数组:是存放整型的数组,字符数组:是存放字符的数组,那么指针数组:就是存放指针的数组了!指针数组的每个元素都是⽤来存放地址(指针)的。

p[i]是访问p数组的元素,p[i]找到的数组元素指向了整型⼀维数组,p[i][j]就是整型⼀维数
组中的元素。
int* p[5]就是指针数组,p表示指针数组变量名,p指向对象有5个元素,*表示p所指向的对象是指针变量,int则表示p所指向的对象为整型。

3. 数组指针变量

上面我们学习了指针数组,指针数组是⼀种数组,数组中存放的是地址(指针)。
那么我们的数组指针呢存放的应该是数组的地址,能够指向数组的指针变量。
我们来看看下面哪一个是数组指针:
1   int *p1[10];
2   int (*p2)[10];
答案是我们的2咯, p先和*结合,说明p是⼀个指针变量,然后指向的是⼀个⼤⼩为10整型的数组。所以 p是⼀个指针,指向⼀个数组,叫数组指针。
注:[]的优先级要⾼于*号的,所以必须加上()来保证p先和*结合。

p是数组指针变量名

有了数组指针的理解,我们就能够讲⼀下⼆维数组传参的本质了。以前我们进行二维数组传参时,我们函数写的都是数组类型进行接收。二维数组其实的存储方式也是连续的,所以对于二维数组我们可以看成是一维数组的数组arr[0](arr则可以看成另一个一维数组)。
根据数组名是数组⾸元素的地址这个规则,⼆维数组的数组名表⽰的就是第⼀⾏的地址,是⼀ 维数组的地址。那就意味着⼆维数组传参本质上也是传递了地址,传递的是第⼀ ⾏这个⼀维数组的地址,那么形参也是可以写成指针形式的。

 我们看见确实可以实现,总结:⼆维数组传参,形参的部分可以写成数组,也可以写成指针形式


4. 函数指针变量

函数指针变量是⽤来存放函数地址的
函数有地址吗?

那么我们确实打印出来了地址,所以函数是有地址的,函数名就是函数的地址,当然也可以通过 &函数名的方式获得函数的地址。如果我们要将函数的地址存放起来,就得创建函数指针变量,函数指针变量的写法就和数组指针非常类似。

 可以看见两种写法都是可以的哈,

 


分享两个有趣的代码:

1 (*(void (*)())0)();
void (*signal(int , void(*)(int)))(int);

 你知道它们各自代表的含义吗?

今天就到这里咯,咱们明天见,拜拜!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【开源】基于Vue和SpringBoot的快乐贩卖馆管理系统

项目编号: S 064 ,文末获取源码。 \color{red}{项目编号:S064,文末获取源码。} 项目编号:S064,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 搞笑视频模块2.3 视…

模拟业务流程+构造各种测试数据,一文带你测试效率提升80%

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

Java设计模式-结构型模式-适配器模式

适配器模式 适配器模式应用场景案例类适配器模式对象适配器模式接口适配器模式适配器模式在源码中的使用 适配器模式 如图:国外插座标准和国内不同,要使用国内的充电器,就需要转接插头,转接插头就是起到适配器的作用 适配器模式&…

Django之模版层

文章目录 模版语法传值模版语法传值特性模版语法标签语法格式if模板标签for模板标签with起别名 模版语法过滤器常用过滤器 自定义过滤器、标签、inclusion_tag自定义过滤器自定义标签自定义inclusion_tag 模版导入模版继承 模版语法传值 模板层三种语法{{}}:主要与数据值相关{%…

C语言不可不敲系列:跳水比赛排名问题

目录 1题干: 2解题思路: 3代码: 4运行结果: 5总结: 1题干: 5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果 A选手说:B第二,我第三; B选手说:我第二,E第四&am…

Redhat Linux v8.2 实时内核环境配置及参数调优

Redhat-Linux V8.2 实时内核环境配置及参数调优 -------物理机 & 虚拟机 一、前言 本文档包含有关Redhat Linux for Real Time的基本安装和调试信息。许多行业和组织需要极高性能的计算,并且可能需要低且可预测的延迟,尤其是在金融和电信行业中。延…

docker安装MongoDB数据库,并且进行密码配置

很美的一首小诗> 我在外面流浪,回来时 故乡瘦了一圈—— 墩子叔走了,门前的池水 干了一半。 屋后驼背的柳树 头发散落了一地, 老房子蹲在坟边,屋顶的白云 仍在风中奔跑。 安装配置 要在Docker中安装MongoDB并启用远程连接&…

微信小程序相机相册授权后,需要重启客户端才能正常调用相机,无法调起窗口选择图片,无反应解决方案

最近微信小程序很多功能突然不能使用,本篇针对无法调起相册进行说明 解决方案 检查小程序隐私协议是否配置,操作步骤这里不在详细说明,点击教程按照上面的教程,找到入口后点击完善或者更新 选择选中的照片或视频这个权限要申请 之…

Behave介绍和快速示例

Behave是一个用于行为驱动开发 (Behavior-Driven Development, BDD) 的 Python 库。使用 Behave,可以编写自然语言格式的使用场景来描述软件的行为,然后用 Python 实现这些场景下的步骤,形成可直接运行的测试。 Behave的目标是帮助用户、开发…

LeetCode【41】缺失的第一个正数

题目: 分析: 第i个位置的数,如果再数组 0到length-1范围内,则将其放到对应的位置; 再遍历一遍数组,找到第一个不在位置i的正数数字,即为所求 思路:https://blog.csdn.net/weixin_45…

打开GeoTIFF文件失败:Unknown field with tag

用QGIS输出的数据类型为UInt16的TIFF文件,无法在GIMP中打开。 GIMP消息提示: 调查 用ImageMagick打开TIFF文件,虽然会出现警告,但是最终还是打开了: 在ImageMagick中重新保存后,就可以用GIMP打开了。使用…

vue-router配置

1、路由安装 npm install vue-router4 2、创建router目录 3、编辑文件且引入router包 4、main.js引入