指针的经典笔试题

                                       经典的指针试题,让你彻底理解指针


前言

之前对于指针做了一个详解,现在来看一些关于指针的经典面试题

再次说一下数组名

数组名通常表示的都是首元素的地址,但是有两个意外,1.sizeof(数组名)这里数组名表示整个数组,计算的是整个数组大小。2.&数组名,这里的数组名表示的依然是整个数字,所以取地址取出的是整个数字的地址。注意:数组传参的本质是首元素的地址,所以形参访问的数组和实参的数组是同一个数组。

一、例题1(程序的结果是什么?)

include <stdio.h>
int main()
{
 int a[5] = { 1, 2, 3, 4, 5 };

 int *ptr = (int *)(&a + 1);

 printf( "%d,%d", *(a + 1), *(ptr - 1));

 return 0;

}

做这种题目的方法就是画图,在图像中把问题的符号都标下来标出来就可以解决了,首先是初始化了一个数组,然后将这个数组的地址存在整形的指针变量里先将它进行强制类型转换,因为本来要等的话需要数组指针来存。

图画出来就非常清晰了。答案是2,5

二、例题2(打印结果是什么?)

#include<stdio.h>
int mian()
{
int a[4]={1.2.3.4};

int*ptr1=(int*)(&a+1);

int*ptr2=(int*)((int)a+1);

printf("%X,%X",ptr[-1],*ptr2);

return 0;
}

这题跟第一题差不多,但是有变化,首先他还是先初始化了一个数字,然后取地址数组名在强制类型转换存到指针变量正确,然后这里有一个新的东西(int)a+1这个表示什么意思,a是一个整形一个整形是四个字节,这个+1就代表只前进一个字节的意思,举个例子

如果   a = oxoo12ff40     a+1-->ox0012ff44        (int)a+1-->ox0012ff41

这个题还要设计到一个大端小端的一个存储的问题,大端就是高到低低到高小端就是高到高,或者是低到低。

比如说小端存储  ox 00 00 01 这个01就是低地址,所以说就是这样放进去的 01 00 00 00的放的放,这就是小端存储。

因为存在ptr2这种特殊状态,所以说我们要把它变成十六进制的存储方式

对ptr2解引用操作就是向后访问四个字节,从小端拿出0x 02 00 00 00 对ptr1解引用操作就是向后访问四个字节,从小端拿出就是0x 00 00 00 04。

三、例题3(打印结果是什么?)

include <stdio.h>
int main()
{
 int a[5][5];

 int(*p)[4];

 p = a;

 printf( "%p,%d\n", &p[4][2] - &a[4][2], &p[4][2] - &a[4][2]);

 return 0;
}

注意:这个题实际上是存在一点问题的,因为这样强制把AP放在P里面会存在问题,他们的类型是不一样的,a的类型是int(*)[5],p的类型是int(*)[4]

这个题难就难在一种思想就是类型不一样,该如何去思考,我们把二维数组直接看成一维数组来做,因为二维数组,其实他就是几个一维数组去构成的,我们把它排成一列,看成一维数组。&p[4][2]运用公式转换*(p+i)=p[i],*[*(p+4)+2]。然后我们在画的图上把P标出来就没问题了

*[*(p+4)+2]第一个解引用操作只拿到了数组名,意思就是说这进入了这个数组里,后面的+2就是在这个数组里加两个再借用就是拿到那个数字,他后面是取地址,就是说取到了那个地方的地址。然后就直接来数他们相差多少,很明显是-4,但是第一个是地址,我们就要把-4转换成补码的形式。用源反补的转化方式来转化。

10000000000000000000000000000100

111111111111111111111111111111111011

111111111111111111111111111111111100

FFFFFFFC

答案为oxFFFFFFFC,-4

四、例题4(打印结果是什么?)

#include <stdio.h>
int main()
{
 int aa[2][5] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

 int *ptr1 = (int *)(&aa + 1);

 int *ptr2 = (int *)(*(aa + 1));

 printf( "%d,%d", *(ptr1 - 1), *(ptr2 - 1));

 return 0;
}

此题又是一个二维数读的指针问题,二位数字的指针问题一律看成一位数组来做,*(aa + 1)这个直接用公式来变化为aa[1],所以就是数组名。二维数组的首元素是它第一行的地址,也就是一个一位数的地址

答案为10,5

五、例题5(打印结果是什么?)

#include <stdio.h>
int main()
{
 char *c[] = {"ENTER","NEW","POINT","FIRST"};

 char**cp[] = {c+3,c+2,c+1,c};

 char***cpp = cp;

 printf("%s\n", **++cpp);

 printf("%s\n", *--*++cpp+3);

 printf("%s\n", *cpp[-2]+3);

 printf("%s\n", cpp[-1][-1]+1);

 return 0;

}

首先前置加加和后置加加会改变原来的值,所以不要++完还和原来的一样。这个题其实看上去很难,实际上就是一个连线题,把图画出来连线就可以了,首先要翻译题目的条件。*cpp[-2]+3等于*[*(cpp-2)+3],cpp[-1][-1]+1等于*[*(cpp-1)-1]+1。

先画出初始化的图

按照顺序来连线因为,前置加加和后置加加会改变原来的值

最开始cpp先加加再进行解引用,他最开始是指向的C +3开头的位置先加加就是只到了C +2,然后再对C +2进行解引用,所以说得到的就应该是POINT

第二问是解引用之后加加,然后最后再减减在加三,最后可以得到ER

第三问,我们已将问题化简*cpp[-2]+3等于*[*(cpp-2)+3],先减2解引用后在解引用加3,最后可得ST

最后一问,我们已将问题化简cpp[-1][-1]+1等于​​​​​​​*[*(cpp-1)-1]+1,先减1在解引用后在减1解引用后在加一,最后可得EW

答案为POINT,ER,ST,EW


总结:其实做了这么多题目就发现指针题目,他在难,只要画个图就会简化很多,再利用图的思路来做这些指针题都会迎刃而解。最后也祝大家新年快乐!!!!

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

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

相关文章

ES入门知识点总结

目录 倒排索引 倒排索引 Elasticsearch的倒排索引是一种数据结构&#xff0c;用于加快基于文本的搜索操作。它的主要优势在于能够快速找到包含特定单词的文档。 倒排索引的构建过程如下&#xff1a; 文档分词&#xff1a;将文档内容分割成单独的词&#xff08;或者更小的词元…

Java的异常体系

一、体系简介 java中的Exception类的子类不仅仅只是像上图所示只包含IOException和RuntimeException这两大类&#xff0c;事实上Exception的子类很多很多&#xff0c;主要可概括为&#xff1a;运行时异常与非运行时异常。 在上述体系中&#xff0c;Error表示严重的系统错误&am…

【前端高频面试题--Vue路由篇】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;前端高频面试题 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac;前端高频面试题--Vue路由篇 对Vue-Router的理解Vue路由懒加载的实现路由的hash和history模式如何获…

车载诊断协议DoIP系列 —— 车辆以太网节点需求汇总

车载诊断协议DoIP系列 —— 车辆以太网节点需求汇总 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师(Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自己。江湖一碗茶,…

【剪辑必备】今天我教你如何手动去下载苹果官网4K预告片 完全免费

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享博主 &#x1f40b; 希望大家多多支持一下, 我们一起学习和进步&#xff01;&#x1f604; &#x1f3c5; 如果文章对你有帮助的话&#xff0c;欢迎评论 &#x1f4ac;点赞&a…

【开源】新生报到网站 JAVA+Vue.js+SpringBoot+MySQL

本文项目编号&#xff1a; T 002 。 \color{red}{本文项目编号&#xff1a;T002。} 本文项目编号&#xff1a;T002。 目录 1 功能模块1.1 在线交流模块1.2宿舍分配模块1.3 校园概况模块1.4 专业管理模块 2 系统展示3 核心代码3.1 图表展示3.2 查询评论3.3 新增报道 4 免责声明 …

儿时游戏“红色警戒”之“AI警戒”

一、红色警戒里“警戒”命令背后的算法原理是什么 在《红色警戒》系列即时战略游戏中&#xff0c;“警戒”命令背后的算法原理相对简单但又实用&#xff0c;其核心目标是让单位能够自动检测并反击一定范围内的敌方单位。虽然具体的实现细节未公开&#xff0c;但可以推测其基本…

【C++】类和对象(五)友元、内部类、匿名对象

前言&#xff1a;前面我们说到类和对象是一个十分漫长的荆棘地&#xff0c;今天我们将走到终点&#xff0c;也就是说我们对于&#xff23;算是正式的入门了。 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:高质量&#xff23;学习 &…

C#根据权重抽取随机数

&#xff08;游戏中一个很常见的简单功能&#xff0c;比如抽卡抽奖抽道具&#xff0c;或者一个怪物有多种攻击动作&#xff0c;按不同的权重随机出个攻击动作等等……&#xff09; 假如有三种物品 A、B、C&#xff0c;对应的权重分别是A&#xff08;50&#xff09;&#xff0c…

寒假项目-酒店综合管理系统

目前所学的东西依然很有限&#xff0c;难以完成项目&#xff0c;目前只编写了部分代码加以参考。 test.c #ifndef __TEST_H__ #define SER_PORT 8888 //服务器端口号 #define SER_IP "192.168.&#xff1f;.&#xff1f;" //服务器IP地址 #…

C#上位机与三菱PLC的通信03--MC协议之A-1E报文解析

1、MC协议帧 MC协议可以在串口通信&#xff0c;也可以在以太网通信&#xff0c;有A-1E和Qna-3E两种模式&#xff0c;这两种都是三菱PLC通信协议中比较常用的两种&#xff0c;一般我们使用比较多的是以太网通信&#xff0c;对于FX5U系列/Q系列/Qna系列/L系列的PLC&#xff0c;…

糟糕,接口被刷了,怎么办?

前言 在面试时&#xff0c;经常会被问一个问题&#xff1a;如何防止别人恶意刷接口&#xff1f; 这是一个非常有意思的问题&#xff0c;防范措施挺多的。今天这篇文章专门跟大家一起聊聊&#xff0c;希望对你会有所帮助。 1 防火墙 防火墙是网络安全中最基本的安全设备之一&…

Python eval函数

在Python编程中&#xff0c;eval()函数是一个强大且灵活的内置函数&#xff0c;用于动态执行字符串表达式或代码。尽管eval()函数具有强大的功能&#xff0c;但它也带来了一些潜在的安全风险&#xff0c;因此在使用时需要谨慎。本文将深入探讨eval()函数的用法、语法、示例代码…

AI:129-基于深度学习的极端天气事件预警

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…

Kibana:如何嵌入 Kibana 仪表板

作者&#xff1a;Carly Richmond 像我这样的前端工程师经常提出的要求是将 Kibana 等来源的现有仪表板嵌入到 JavaScript Web 应用程序中。 这是我必须多次执行的任务&#xff0c;因为我们希望快速部署用户生成的视图或允许用户控制给定的视图。 从我们从精彩的开发者社区收到的…

安装 Windows Server 2019

1.镜像安装 镜像安装:Windows Server 2019 2.安装过程(直接以图的形式呈现) 先选择""我没有产品密钥"",选择桌面体验 选择自定义 设置密码后继续 安装成功

算法——组合数学——二项式定理

杨辉三角是二项式系数的典型应用当 n 较大&#xff0c;且需要取模时&#xff0c;二项式系数有两种计算方法&#xff1a; 一&#xff1a;递推公式&#xff0c;二&#xff1a;逆 方法一&#xff1a;用递推公式计算二项式系数 public class BinomialCoefficient {public static i…

【数据结构】16 二叉树的定义,性质,存储结构(以及先序、后序、中序遍历)

二叉树 一个二叉树是一个有穷的结点集合。 它是由根节点和称为其左子树和右子树的两个不相交的二叉树组成的。 二叉树可具有以下5种形态。 性质 一个二叉树第i层的最大结点数为 2 i − 1 2^{i-1} 2i−1, i ≥ 1 i \geq 1 i≥1 每层最大结点可以对应完美二叉树&#xff08;…

可视化锻炼日记ExerciseDiary

什么是 ExerciseDiary &#xff1f; ExerciseDiary 是带有 GitHub 风格的年度可视化的锻炼日记。 安装 在群晖上以 Docker 方式安装。 在注册表中搜索 exercisediary &#xff0c;选择第一个 aceberg/exercisediary&#xff0c;版本选择 latest。 本文写作时&#xff0c; lat…

互联网时代的文学复兴:中文诗词大数据分析 | 开源日报 No.170

chinese-poetry/chinese-poetry Stars: 45.4k License: MIT 最全的中文诗歌古典文集数据库&#xff0c;包含 5.5 万首唐诗、26 万首宋诗、2.1 万首宋词和其他古典文集。数据来源于互联网。该开源项目旨在通过 JSON 格式分发&#xff0c;方便用户开始自己的项目&#xff0c;并借…