指针的经典笔试题

news2024/11/26 1:57:43

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


前言

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

再次说一下数组名

数组名通常表示的都是首元素的地址,但是有两个意外,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


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

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

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

相关文章

Chat with RTX 安装

1、Chat With RTX 介绍 Chat With RTX 是一个 Demo&#xff0c;用来将您自己的资料&#xff08;文档、笔记、视频或其他数据&#xff09;与大语言模型建立连接&#xff0c;从而令 LLM 更具个性化。利用检索增强生成 (RAG)、TensorRT-LLM 和 RTX 加速&#xff0c;您可以与自定义…

GiantPandaCV | 视觉类表面缺陷检测项目相关技术总结

本文来源公众号“GiantPandaCV”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;视觉类表面缺陷检测项目相关技术总结 本文由海滨撰写&#xff0c;首发于GaintPandaCV。 零、前言 做这个方向的项目也有一段时间了&#xff0c;作为…

第9章 网络编程

9.1 网络通信协议 通过计算机网络可以实现多台计算机连接&#xff0c;但是不同计算机的操作系统和硬件体系结构不同&#xff0c;为了提供通信支持&#xff0c;位于同一个网络中的计算机在进行连接和通信时必须要遵守一定的规则&#xff0c;这就好比在道路中行驶的汽车一定要遵…

代码随想录算法训练营第二十四天|回溯算法理论 77.组合

回溯算法理论 回溯和递归式相辅相成的&#xff0c;只要有递归就会有回溯一般 递归函数的下面就是 回溯的逻辑 回溯相当于穷举搜索的巧妙实现 回溯算法常解决的问题&#xff1a; 组合切割子集排列棋盘回溯代码的框架 void backtracking(参数) {if (终止条件) {存放结果;retu…

线性注意力机制全新升级!性能显著提高,速度、精度更优

线性注意力机制通过对传统注意力机制中的Softmax操作进行线性化处理&#xff0c;可以提高Transformer模型的并行性能、降低复杂度&#xff0c;在计算效率、模型表达能力等方面都具有优势。 作为一种常用有效的优化方法&#xff0c;线性注意力机制可以在保证模型性能的同时提高…

cefsharp121(cef121.3.7Chromium121.0.6167.160)升级测试及其他H264版本

一、版本说明 1.1 本此版本 此版本CEF 121.3.7+g82c7c57+chromium-121.0.6167.160 / Chromium 121.0.6167.160 1.2 其他支持H264版本 支持H264推荐版本:V100,V109,V111,V119版本,其他V114,V115,V108,V107 支持win7/win8/win8.1最后版本v109.x 支持NET4.5.2最后版本v114.x …

Linux rp_filter、arp_filter、arp_ignore、arp_announce参数说明

Linux rp_filter、arp_filter、arp_ignore、arp_announce参数说明。我查看了参考资料&#xff0c;又去查阅了官方文档&#xff0c;凭着我的理解整理了以下文档。各位大神的文档写的很好&#xff0c;但都不喜欢断句啊&#xff0c;读的我这叫一个累。 参考 1.网络编程之网络丢包…

PPT导出PDF时保持图像高清的方法

问题: 我们经常会发现&#xff0c;在PPT中插入的图片非常高清&#xff0c;但是通过PPT转换为PDF之后&#xff0c;图片就会出现不同程度的失真。 问题产生的原因: 这是因为Acrobat的PDF Maker在将PPT转换为PDF的时候&#xff0c;对PPT中的图片进行了压缩 Solution: 在PPT的…

c++ Qt 数据库操作

1、准备工作 Qt本身并没有数据库功能&#xff0c;但是Qt支持调用其他主流的数据库产品&#xff0c;并且这些数据库产品统一了Qt的接口&#xff0c;实际上是一种数据库的中间件。 Qt支持以下数据库类型&#xff1a; 嵌入式常用的数据库是sqlite3&#xff0c;本体只有几兆大小。非…

win7自带截图工具保存失效解决办法

今日发现一台远航技术的win7中自带的截图工具使用时正常&#xff0c;保存图片时没有弹出保存位置的对话窗口&#xff0c;无法正常保存图片。解决方案如下&#xff1a; 1、进入注册表编辑器。开始-搜索程序和文件-输入 regedit 按下回车键&#xff0c;打开注册表&#xff1b; 2、…

auto关键字详讲

目录 1.问题思考 2.auto关键字介绍 3. 早期auto的缺陷&#xff1a; 4.什么叫自动存储器&#xff1f; 5. c标准auto关键字 5.1auto的使用细节 5.2 auto什么时候不能推导变量的类型呢&#xff1f; 5.3基于范围的for循环 5.3.1范围for的用法 5.3.2 范围for的使用条件 6.…

家庭动态网络怎么在公网访问主机数据?--DDNS配置(动态域名解析配置)

前言 Dynamic DNS是一个DNS服务。当您的设备IP地址被互联网服务提供商动态变更时,它提供选项来自动变更一个或多个DNS记录的IP地址。 此服务在技术术语上也被称作DDNS或是Dyn DNS 如果您没有一个静态IP,那么每次您重新连接到互联网是IP都会改变。为了避免每次IP变化时手动更…

14. 推荐系统之矩阵分解

本文为 「茶桁的 AI 秘籍 - BI 篇 第 14 篇」 文章目录 矩阵分解 ALS常用推荐算法什么是矩阵分解矩阵分解的目标函数 Hi&#xff0c;你好。我是茶桁。 新年过后&#xff0c;咱们要开始学一些新内容了。从今天开始&#xff0c;要给大家去讲解的是关于推荐系统的内容。推荐系统的…

「递归算法」:两两交换链表中的节点

一、题目 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4] 输出&#xf…

【sgCreatePinyin】自定义小工具:敏捷开发→自动化生成拼音字段名称(字段名生成工具)

源码 <template><!-- 前往https://blog.csdn.net/qq_37860634/article/details/136126311 查看使用说明 --><div :class"$options.name"><div class"sg-head">拼音字段生成工具</div><div class"sg-container&qu…

C#,计算几何,贝塞耳插值(Bessel‘s interpolation)的算法与源代码

Friedrich Wilhelm Bessel 1 贝塞耳插值&#xff08;Bessels interpolation&#xff09; 首先要区别于另外一个读音接近的插值算法&#xff1a;贝塞尔插值&#xff08;Bzier&#xff09;。 &#xff08;1&#xff09;读音接近&#xff0c;但不是一个人&#xff1b; &#x…

《剑指 Offer》专项突破版 - 面试题 47 : 二叉树剪枝(C++ 实现)

题目链接&#xff1a;LCR 047. 二叉树剪枝 - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 一棵二叉树的所有节点的值要么是 0 要么是 1&#xff0c;请剪除该二叉树中所有节点的值全都是 0 的子树。例如&#xff0c;在剪除下图 (a) 中二叉树中所有节点值都为 0 的…

OpenAI又出王炸,Sora是否要开启视频AI新时代?

OpenAI又出王炸&#xff0c;Sora是否要开启视频AI新时代&#xff1f; 关注微信公众号 DeepGoAI 前几天我们还在讨论 如何让ChatGPT3.5变得更聪明 今天OpenAI就带着新王炸出现了 如同ChatGPT一般 在计算机领域掀起轩然大波 开启真正视频AI新时代 那就是 Sora 很多同学可…

MinIO 和 Apache Tika:文本提取模式

Tl;dr: 在这篇文章中&#xff0c;我们将使用 MinIO Bucket Notifications 和 Apache Tika 进行文档文本提取&#xff0c;这是大型语言模型训练和检索增强生成 LLM和RAG 等关键下游任务的核心。 前提 假设我想构建一个文本数据集&#xff0c;然后我可以用它来微调 LLM.为了做…

【实战】二、Jest难点进阶(一) —— 前端要学的测试课 从Jest入门到TDD BDD双实战(五)

文章目录 一、Jest 前端自动化测试框架基础入门二、Jest难点进阶1.snapshot 快照测试 学习内容来源&#xff1a;Jest入门到TDD/BDD双实战_前端要学的测试课 相对原教程&#xff0c;我在学习开始时&#xff08;2023.08&#xff09;采用的是当前最新版本&#xff1a; 项版本babe…