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

news2024/10/7 10:23:32

目录

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

题目一:

题目二:

题目三:

题目四:

题目五:

题目六:

题目七:


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

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

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

题目一:

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

&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.coloradmin.cn/o/1630306.html

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

相关文章

应急行业的智能安全帽(高端)

前面介绍了低端、中端安全帽,接着再讲讲高端安全帽。做高端安全帽的企业非常少,估计一只手都数的出来。确实也和智能安全帽这个领域体量有关系,并且他有一个新的“劲敌”——智能眼镜从其他领域瓜分原属于他的市场,这些都是题外话…

3DTiles特性与内容解析

一篇19年整理的比较老的笔记了。更多精彩内容尽在数字孪生平台。 瓦片种类 3DTiles瓦片有多种类型: b3dm(Batched 3D Model,批量3D模型) b3dm瓦片存储了多个个体,b3dm中的glb代表的实际对象应该具有相同的种类但是可能数据内容不同。b3dm…

【综述】DSP处理器芯片

文章目录 TI DSP C2000系列 TMS320F28003X 典型应用 开发工具链 参考资料 TI DSP TI C2000系列 控制领域 TI C5000系列 通信领域 TI C6000系列 图像领域 C2000系列 第三代集成了C28浮点DSP内核,采用了65nm工艺(上一代180nm) 第四代正在…

后端端口也可以直接在浏览器访问

比如在浏览器输入http://localhost:8078/hello/helloword访问的是后端的 RestController RequestMapping("/hello") public class HelloWord {RequestMapping("/helloword")public String helloWord(){return "hello word";} }浏览器将会返回

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

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

YES-3000D数显压力试验机技术方案书

一、简介 本机采用主机与液压系统集于一体的结构形式,结构紧凑,小巧玲珑。采用电机带动丝杠调整压缩空间,液压加荷、电子测力,具有加荷数率显示,峰值保持等功能,并配有微型打印机。 二、 液压系统 油箱内…

K8S 部署和访问 Kubernetes 仪表板(Dashboard)

文章目录 部署 Dashboard UI浏览器访问登陆系统 Dashboard 是基于网页的 Kubernetes 用户界面。 你可以使用 Dashboard 将容器应用部署到 Kubernetes 集群中,也可以对容器应用排错,还能管理集群资源。 你可以使用 Dashboard 获取运行在集群中的应用的概览…

Spring Boot项目中的ASCII艺术字

佛祖保佑: ${spring-boot.formatted-version} ———————————————————————————————————————————————————————————————————— // _ooOoo_ …

深入理解分布式事务② ---->分布式事务基础(MySQL 的 4 种事务隔离级别【读未提交、读已提交、可重复读、串行化】的最佳实践演示)详解

目录 深入理解分布式事务② ---->分布式事务基础(MySQL 的 4 种事务隔离级别【读未提交、读已提交、可重复读、串行化】的最佳实践演示)详解1、MySQL 事务基础1-1:MySQL 中 4 种事务隔离级别的区别1-2:MySQL 中 4 种事…

SpringCloud系列(10)--Eureka集群原理及搭建

前言:当注册中心只有一个,而且当这个注册中心宕机了,就会导致整个服务环境不可用,所以我们需要搭建Eureka注册中心集群来实现负载均衡故障容错 Eureka架构原理图 1、Eureka集群原理 2、创建Eureka Server端服务注册中心模块 (1)在…

音频智能切换器JR-AR42-A

憬锐JR-AR42-A音频自动智能切换器(四切一),具备四路模拟卡侬立体声音频输入,两路模拟卡侬立体声音频输出,其中输入第1路和输出第1路为断电直通通道。具有输入音频信号幅度判别,可设置门限电平和切换延时时间,可以根据需…

ParkUnpark

Park&Unpark 文章目录 Park&UnparkPark&Unpark基本使用特点 park&unpark原理 Park&Unpark基本使用 它们是 LockSupport 类中的方法 // 暂停当前线程 LockSupport.park(); // 恢复某个线程的运行 LockSupport.unpark(暂停线程对象)先 park 再 unpark Sl…

软考之零碎片段记录(二十七)+复习巩固(十三、十四)

学习 1. 案例题 涉及到更新的。肯能会是数据流的终点E, P, D 数据流转。可能是 P->EP->D(数据更新)P->P(信息处理)D->P(提取数据信息) 2. 案例2 补充关系图时会提示不增加新的实体。则增加关联关系 3. 案例3 用例图 extend用于拓展,当一个用例…

2024最新AIBotPro开源码AI Web 应用支持GPT-4全模型

2024最新AIBotPro开源码AI Web 应用支持GPT-4全模型, 支持AI绘画/插件联网/自定义插件/AI知识库等等。 内有详细的图文搭建教程

小龙虾优化算法(Crayfish Optimization Algorithm,COA)

小龙虾优化算法(Crayfish Optimization Algorithm,COA) 前言一、小龙虾优化算法的实现1.初始化阶段2.定义温度和小龙虾的觅食量3.避暑阶段(探索阶段)4.竞争阶段(开发阶段)5.觅食阶段&#xff08…

进程地址空间 【Linux】

文章目录 进程地址空间 进程地址空间 进程地址空间,本质是一个描述进程可视范围的大小, 地址空间内一定要存在各种区域划分,对线性地址进行start,和end即可 在每一个区的_start 到_end 范围内,这段连续的空间中&…

Swift - Playground

文章目录 Swift - Playground1. 新建Playground2. View3. 图片4. ViewController5. Playground - 多Page6. 注释6.1 Playground的注释支持markup语法(与markdown相似)6.1.1 语法 Swift - Playground Playground可以快速预览代码效果,是学习语…

前端计算机网络之网络模型

什么是网络模型 对于前端开发者而言,理解网络模型的概念是非常重要的。网络模型是描述数据如何在网络中传输和处理的框架和规则,它有助于前端开发者更好地理解和优化应用程序与服务器之间的通信过程。 常用的两类模型 前端开发者需要了解的网络模型主…

引入线程的贪吃蛇风骚走位

1.在main函数中分别引入线程t1 和线程 t2 一个线程用来刷新界面,一个线程用来改变方向 2.刷新界面函数,无限次刷新 3. 也是无限循环while(1) 定义key 从键盘获取输入方向,赋值给dir; 4.在初始化函数中确定蛇向有行走为方向 5.从改变方向的函数…

c++中的链表list的模拟实现

拖更了半个月,我终于来填c的坑啦。上次我们说的vetcor不知道小伙伴还记得多少呢?今天我们要讲list的模拟实现。 目录 架构结点list表的结构 构造函数尾插push_back()尾删pop_back()计算个数:size()判断空empty()※迭代器问题普通迭代器迭代器…