数组和指针经典笔试题讲解下

目录

创作不易,如对您帮助,还望一键三连,谢谢!!!

题目一:

题目二:

题目三:

题目四:

题目五:

题目六:

题目七:


创作不易,如对您帮助,还望一键三连,谢谢!!!

上次我们讲解了数组笔试题目,今天我们接着讲解指针经典的笔试题目。

话不多说,我们直接来看题目:

题目一:

这段代码运行结果是什么呢?

&a是&数组名,取出的是整个数组的地址,类型是int(*)[5],&a+1跳过整个数组,指向数组后面的内存地址,紧接着又进行了强制类型转换,转换成了int*类型的指针。

*(a+1),此时a表示数组首元素的地址,a+1表示第二个元素的地址,对其解引用得到第二个元素2,所以第一个打印结果为2。

*(ptr-1):ptr指向数组后面的内存地址,ptr-1指向了数组的最后一个元素5,解引用得到数组最后一个元素的值5,所以打印结果为5

示意图如下所示:

题目二:

这个结果又是多少呢?

我们首先创建了一个二维数组,创建了一个int*类型的p指针,并进行了p=a[0]的操作,那么此时a[0]表示什么呢?它既没有单独放在sizeof内部,也没有对其单独进行&操作,所以此时a[0]表示二维数组首元素的地址,那么p[0]其实就是*(p+0),也就是得到数组第一个元素。

那么问题来了,数组第一个元素是什么,是0吗?

有一部分粗心的小伙伴肯定立马写出0,但我们认真看二维数组a的初始化,就能从中发现端倪:二维数组初始化它使用了诸如(x,y)这种形式的初始化方式,这是什么?这是逗号表达式!所以该初始化只初始化了数组前三个元素,赋值为:1,3,5,其余全为0

所以本题的结果为1.

题目三:

这段代码在给定条件下结果为多少?

首先,我们来看题目:p是一个结构体指针,后面全是对p进行加减整数,这不就是考察指针加减整数吗?

p是一个结构体指针,p+1就跳过整个结构体。

p+0x1:就是p+1,跳过一个结构体,就是20个字节,所以就是0x00100000+20,注意进制不同!一个是16进制,一个是10进制,结果为0x00100014

(unsigned long)p+0x1:这里把p强制类型转换为unsigned long类型,是个长整型,整形加一不就是加一吗?所以结果为0x0010001.

(unsigned int*)p+1:这里把p强制类型转换为unsigned int*类型,是个指针,此时p+1跳过一个unsigned int大小的元素,也就是跳过4个字节,所以就是0x00100000+4,结果为0x00100004。

我们运行代码,发现结果正确:

题目四:

我们先看题目,创建了一个数组指针p,指向一行为4个元素的数组

接着又p=a,此时a表示数组首元素的地址,也就是二维数组第一行的地址,那二维数组每行不应该是5个元素吗?没错,这两个类型不一样:一个是int(*)4,一个是int(*)5,这一点我们要能看出来。

接着就是要找到a[4][2]和p[4][2]了。

我们先来回忆一下一个重要的知识:二维数组每行在内存中是连续存放的,可以看成一个个连续的一维数组。

p[4][2]==*(*(p+4)+2),知道这个,我们就能找到&p[4][2]的位置了,最后要计算&p[4][2]-&a[4][2]就是指针减去指针,得到的是二者之间的元素个数,为4,注意这里是-4.

-4在内存中存放的是其补码,为:11111111 11111111 11111111 11111100

我们再来看一个按%p打印,一个按照%d打印。

%p是按地址打印,而地址有负数吗?没有,所以会自动把数据当成正数,正数原反补码相同,故结果为0XFFFFFFFC。

%d是按十进制整数打印,所以结果就是-4。

题目五:

这道题目考察的是二维数组数组名的理解,昨天我们系统的讲过了,这题就十分简单了:

ptr1:&aa取出的是整个二维数组的地址,类型为int(*)[2][5],加一跳过整个数组,指向数组后面的内存地址,接着又强制类型转换为int*类型,故ptr1-1指向二维数组最后一个元素,解引用得到二维数组最后一个元素10,故打印结果为10。

ptr2:aa表示数组首元素的地址,即为二维数组第一行的地址,aa+1跳过一行,指向二维数组的第二行,*(aa+1)访问得到二维数组的第二行,强转为int*类型,所以ptr2-1指向5,解引用得到5,最后打印结果为5

题目六:

这题目一看,秒了:阿里巴巴的笔试题。哈哈~。

我们来看题目:定义了一个指针数组a,数组中存放着“work” ,“at”,“alibaba”的首元素的地址。

pa是一个二级指针,存放着a的地址,pa++,此时指针加一,跳过一个元素,也就是跳过一个char*类型的元素:

对pa进行解引用得到字符串“at”的首元素的地址,故打印结果为at。

题目七:

作为压轴题,这道题还是有一定的难度的,接下来我们来一步步讲解:

这是上诉代码大致示意图,定义了一个指针数组c,指向内容如图所示,又定义了一个指针数组cp指向内容如图所示,又定义了一个指针,指向cp。

先看这段代码,++cpp,cpp跳过一个元素,指向cp第二个元素,对其解引用得到cp的第二个元素,在解引用得到c数组的第三个元素,也就是“POINT”的首元素地址,对其进行打印,故结果为POINT.

注意,因为进行了++cpp操作,此时cpp的指向已经改变,指向cp的第二个元素,如下图所示:

接下来来看下一个:

++cpp改变了cpp的指向,此时cpp指向cp的第三个元素,解引用访问得到cp的第三个元素,

而cp的第三个元素指向c的第二个元素“NEW”的首元素地址,--*++cpp对其进行自减运算,此时cp数组的第三个元素的指向被改变,指向了c数组的第一个元素。

最后进行+3操作,指向了ENTER的第四个字符的地址,故打印结果为ER。

示意图如下:

再看下一个:

cpp[-2]==*(cpp-2),故cpp[-2]访问得到cp首元素,再次解引用访问到c数组第四个元素,也就是FIRST首元素的地址,+3操作,得到S的地址,故打印结果为ST.

这里没有对指针进行自增自减操作,故指针指向不变,仍然为:

最后一个:

cpp[-1][-1]==*(*(cpp-1)-1)。

*(cpp-1)得到cp数组的第二个元素。

*(*(cpp-1)-1)就相当于*((*(cp+2))-1),使得cp第二哥元素指向了c的第二个元素,也就是NEW收元素的地址,+1跳过一个元素,指向了NEW第二个元素的地址,故打印结果为EW。

至此,我们把数组和指针的一些经典笔试题讲解完毕。希望大家能有所收获。

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

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

相关文章

在 Ubuntu 下使用 clash-for-linux-backup

记录一下如何在 Ubuntu(其它带bash的Linux应该都可以)下运行Clash 有人已经制作了方便使用的脚本, 仓库为 https://github.com/Elegycloud/clash-for-linux-backup, 直接使用这个仓库就可以了. clone 这个仓库 https://github.com/Elegycloud/clash-for-linux-backup 到本地 …

震惊!某省图书馆竟然可以注册后直接访问知网并下载文章?

四川省图书馆 使用说明 1.点击进入https://portal.sclib.org/interlibSSO/main/main.jsp 显示如下: 2.关注四川省图书馆公众号并注册 3.点击馆外登录并使用刚注册的用户名密码登录 显示如下: 4.登录成功后跳转至首页并点击cnki即可正常使用

2024年最新一线互联网企业高级软件测试工程师面试题大全

1、功能测试 功能测试是游戏测试中跟“玩游戏”最相关的一个环节。 当然这里的“玩”不是要真的让你感受快乐,而是要通过“玩”游戏,发现存在的问题或不合理的地方。因此,这个“玩”的过程基本不会感受到游戏的乐趣。事实上,每一次…

BIO NIO AIO有什么区别?

通俗易懂地解释这些东西是我的风格, BIO就是阻塞io,就是一个程序在发出io请求之后不能干任何别的事,只能等待请求,不断检测io的状态,只有接受到反馈之后才能干别的事 适用场景: 用作请求少而且连接时间短的情况 NIO就是非阻塞,也就是没有阻塞,怎么没有阻塞了?说白了就是发出…

低代码+定制物资管理:创新解决方案探析

引言 在当今快速变化的商业环境中,企业面临着不断增长的挑战,如提高效率、降低成本、满足客户需求等。为了应对这些挑战,企业需要不断创新并采用先进的技术解决方案。在这样的背景下,低代码开发和定制化物资管理成为了引领企业变…

管理情绪方法中篇【三分法、整理自己的观念合理、人活着要有弹性】

是 VS 非、成功 VS 不成功 二分法 逃出二分法【二合一,三分法】:不公平才是公平,公平才是不公平 有弹性回答: 1、好像还不错 2、到时在看看,有弹性 3、没有意见,我突然想到一个意…

【3GPP】【核心网】【5G】5G核心网协议解析(四)(超详细)

1. 欢迎大家订阅和关注,精讲3GPP通信协议(2G/3G/4G/5G/IMS)知识点,专栏会持续更新中.....敬请期待! 目录 1. NGAP 按流程功能分类 1.1 接口管理过程 1.1.1 NG Setup 1.2.1 NAS消息传输过程 Transport of NAS Messa…

Android 14设置android:importantForAutofill=“no“无效

密码输入框EditText不希望弹出Google的是否保存密码弹出框, 直接设置了android:importantForAutofill"no", android:inputType"textPassword|textNoSuggestions"在安卓12手机上有效,但是在安卓14上面就不行了&#xff0…

记一次JSON.toJSONString()转换时非属性方法空指针异常排查及toJSONString保留null值属性

记一次JSON.toJSONString()转换时非属性方法空指针异常排查及toJSONString保留null值属性 异常详情 有一个类,里面有两个属性和一个类似工具的getRealName()方法如下: getRealName()方法就是获取这个人的真实名字,如果获取不到就以name返回…

堆的介绍,实现,使用(c语言实现)

目录 堆的概念 堆的性质: 堆的分类 父子结点的下标关系 堆的向下调整算法 ​编辑小堆 大堆 建堆 堆的向上调整算法 小堆 大堆 堆的基本操作 定义堆 初始化堆 销毁堆 打印堆 堆的插入 堆的删除 大堆(Max Heap)的向下调整算法…

jadx反编译apk

ref:https://github.com/skylot/jadx jadx是一款反编译利器,同时支持命令行和图形界面,能以最简便的方式完成apk的反编译操作。 安装: 1.windos: https://github.com/skylot/jadx/releases/tag/v1.2.0 下载jadx-1.…

Java 设计模式(上)

目录 一、单一职责原则 二、开闭原则 三、里氏替换原则 四、迪米特法则 五、接口隔离原则 六、依赖倒置原则 七、工厂方法 八、抽象工厂 九、建造者模式 十、原型模式 十一、单例模式 十二、适配器模式 一、单一职责原则 单一职责原则又称单一功能原则,…

【Redis 开发】分布式锁中的常见问题和Lua脚本

分布式锁中的问题 分布式锁中我们设置的过期时间: 如果有一个线程获取锁之后在进行操作时,到达了锁的过期时间,之后就会有别的线程获得锁,如果这时,第一个线程执行完成后释放锁,就会将第二个锁的线程删除 …

回溯-单词搜索

给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相…

SpringMVC深解--一起学习吧之架构

SpringMVC的工作原理主要基于请求驱动,它采用了前端控制器模式来进行设计。以下是SpringMVC工作原理的详细解释: 请求接收与分发: 当用户发送一个请求到Web服务器时,这个请求首先会被SpringMVC的前端控制器(Dispatche…

关于远程桌面端口的优化措施的建议

在信息技术的世界中,远程桌面连接已成为企业、教育和个人用户之间共享信息、协作工作的重要工具。而这一切的背后,都离不开远程桌面端口(RDP,Remote Desktop Protocol Port)的支持。RDP端口不仅关乎到远程访问的顺畅性…

自然语言处理的发展及归纳介绍

NLP简介 自然语言处理(Natural Language Processing,NLP)是人工智能领域的一个重要分支,旨在使计算机理解、解释和生成人类语言。NLP的产生背景可以追溯到上世纪50年代,随着计算机科学和人工智能领域的发展&#xff0c…

ABAP MR21: BAPI_MATVAL_PRICE_CHANGE

文章目录 前言 一、报错问题 二、代码如下 总结 前言 MR21 发布物料价格,BAPI_MATVAL_PRICE_CHANGE 一、报错问题 BAPI报错:估价XXX 对于物料XXXXXXXXXXXXX没有被维护 解决办法:CKML_PRICE_SEND没有对应的评估范围数据,SM30&a…

问题解答2024年4月28日

import java.util.ArrayList; import java.util.List; import java.util.Stack;//现有数据库里保存有行政区数据, 一个行政区是一行数据,包括行政区id,行政区名称,行政区父id。 比如: // //行政区ID, 行政区名称&…

【Linux】进程信号 -- 详解

⚪前言 注意:进程间通信中的信号量跟下面要讲的信号没有任何关系。 一、从不同角度理解信号 1、生活角度的信号 你在网上买了很多件商品,在等待不同商品快递的到来。但即便快递没有到来,你也知道快递来临时,你该怎么处理快递&a…