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

目录

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

题目一:

题目二:

题目三:

题目四:

题目五:

题目六:

题目七:


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

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

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

题目一:

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

&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.mfbz.cn/a/580285.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python中如何用matplotlib写柱状图

#代码 import matplotlib.pyplot as plt import numpy as npspecies ("Adelie", "Chinstrap", "Gentoo") penguin_means {Bill Depth: (18.35, 18.43, 14.98),Bill Length: (38.79, 48.83, 47.50),Flipper Length: (189.95, 195.82, 217.19),…

智能外呼文书送达系统,智慧检务解决方案

在全民数字化改革中,司法体制改革不断推进的大背景下,合肥高新技术产业开发区人民检察院的内设机构改革已完成落地,刑事案件审查办理迎来了重大改变,需要检察官对现有办案方式方法做出相应的调整,将主要精力从大量的重…

【AIGC调研系列】Sora级别的国产视频大模型-Vidu

Vidu能够达到Sora级别的标准。Vidu被多个来源认为是国内首个Sora级别的视频大模型[2][3][4]。它采用了团队原创的Diffusion与Transformer融合的架构U-ViT,能够生成长达16秒、分辨率高达1080P的高清视频内容[1][6]。此外,Vidu的一致性、运动幅度都达到了S…

无人机+集群组网+单兵图传:空地一体化组网技术详解

空地一体化组网技术是一种结合了无人机、集群自组网和单兵图传等多种技术的先进通信解决方案。这种技术方案的主要目的是在前线事故现场和后方指挥中心之间建立一个高效、稳定的通信链路,以确保信息的实时传输和指挥的顺畅进行。 首先,前端视频采集部分&…

面试经典150题——求根节点到叶节点数字之和

​ 1. 题目描述 2. 题目分析与解析 2.1 思路一——DFS 理解问题: 首先要理解题目的要求,即对于给定的二叉树,我们需要找出从根节点到所有叶子节点的所有路径,然后将每一条路径上的数字组成一个整数,最后求出这些整数…

JSP在页面用<%=调用声明函数时出现HTTP 500错误

JSP在页面用<%调用声明函数时出现HTTP 500错误 错误描述&#xff1a; Eclipse在编写JSP页面时&#xff0c;在其中采用<%&#xff01;%>方式声明了函数&#xff0c;然后在页面中用<%函数名%>方式调用时&#xff0c;出现HTTP状态500错误&#xff0c;提示为&#…

github Copilot的使用总结

1. 代码建议和补全 GitHub Copilot 的基本使用涉及编写代码时的实时代码建议和补全。一旦你已经安装并配置好 GitHub Copilot 插件&#xff0c;你可以在支持的编辑器&#xff08;如 Visual Studio Code&#xff09;中开始使用 Copilot。以下是一些基本的使用步骤&#xff1a; …

《苍穹外卖》Day10部分知识点记录

一、Spring Task 介绍 Spring Task是Spring框架提供的任务调度工具&#xff0c;可以按照约定的时间自动执行某个代码逻辑。 定位&#xff1a;定时任务框架 作用&#xff1a;定时自动执行某段Java代码 应用场景&#xff1a;只要是需要定时处理的场景都可以使用Spring Task …

飞书API(6):使用 pandas 处理数据并写入 MySQL 数据库

一、引入 上一篇了解了飞书 28 种数据类型通过接口读取到的数据结构&#xff0c;本文开始探讨如何将这些数据写入 MySQL 数据库。这个工作流的起点是从 API 获取到的一个完整的数据&#xff0c;终点是写入 MySQL 数据表&#xff0c;表结构和维格表结构类似。在过程中可以有不同…

重生奇迹mu装备掉落大全

1、骷髅兵&#xff1a; [一般宝]毒戒指(3%HP)石巨人召唤石玛雅雷之项链(1%)。 2、独眼巨人&#xff1a;4冰之戒指(2%)3雷之项链(2%)3毒之戒指天使3毒戒(3%回复)灵魂祝福石巨人石玛雅钻云枪石。 3、幽灵&#xff1a;3雷链(hp3%)守护天使小恶魔&#xff0c;灵魂宝石祝福4冰戒回3…

AI赋能分层模式,解构未来,智领风潮

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 &#x1f680; 转载自热榜文章&#x1f525;&#xff1a;探索设计模式的魅力&#xff1a;AI赋能分…

【探索Java编程:从入门到入狱】Day3

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收…

Redis分布式锁 - 基于Jedis和LUA的分布式锁

先基于单机模式&#xff0c;基于Jedis手工造轮子实现自己的分布式锁。 首先看两个命令&#xff1a; Redis 分布式锁机制&#xff0c;主要借助 setnx 和 expire 两个命令完成。 setnx命令: setnx 是 set if not exists 的简写。将 key 的值设为 value &#xff0c;当且仅当…

跨设备自动化协同提效新利器!边缘自动化流程编排工具

痛点剖析 随着企业生产环境的日益复杂化&#xff0c;不同生产设备间的协调性问题尤为凸显。 1、不同设备往往基于各自的技术标准、通信协议和操作系统设计&#xff0c;这使得它们之间的数据交换和指令传递存在显著的障碍。 2、技术上的不兼容性导致设备间难以实现无缝对接和…

Matplotlib是什么?

一、Matplotlib是什么&#xff1f; Matplotlib是一个Python语言的2D绘图库&#xff0c;它非常广泛地用于数据的可视化。以下是一些主要特点&#xff1a; 多功能性&#xff1a;它允许用户创建各种静态、动态或交互式的图表&#xff0c;如线图、散点图、直方图等。跨平台性&…

基于MSP430F249的电子钟仿真(源码+仿真)

目录 1、前言 2、仿真 3、程序 资料下载地址&#xff1a;基于MSP430F249的电子钟仿真(源码仿真&#xff09; 1、前言 基于MSP430F249的电子钟仿真&#xff0c;数码管显示时分秒&#xff0c;并可以通过按键调节时间。 2、仿真 3、程序 #include <MSP430x24x.h> #def…

Spring Boot项目中的ASCII艺术字

佛祖保佑&#xff1a; ${spring-boot.formatted-version} ———————————————————————————————————————————————————————————————————— // _ooOoo_ …

tomcat系统架构及运用

文章目录 下面是Tomcat架构的详细解析&#xff1a;1. **Server&#xff08;服务器&#xff09;**2. **Service&#xff08;服务&#xff09;**3. **Container&#xff08;容器&#xff09;** - 分层结构4. **Connectors&#xff08;连接器&#xff09;**5. **类加载器&#xff…

数据集笔记:处理北大POI 数据:保留北京POI

数据来源&#xff1a;Map POI (Point of Interest) data - Official data of the contest (pku.edu.cn) windows 下载方法&#xff1a;数据集笔记&#xff1a;windows系统下载北大开放数据研究平台的POI数据-CSDN博客 1 读取数据 1.1 列出所有的文件 dir1D:/data/PKU POI/2…

如何管理约束

本文主要介绍如何管理约束&#xff0c;包括决定何时发生约束检查&#xff0c;如何删除约束&#xff0c;删除和更新父行&#xff0c;插入和更新子行。 1. 约束事务模式 约束事务模式决定何时发生引用违例检查。 对于具有日志记录的数据库 — 即时约束&#xff08;Immediate con…