【C语言进阶】指针面试题详解(2)

        上一期内容,大多数的解题思路写在代码中,没有写在正文中,这就导致系统判断文章质量不高,没有什么数据,这一期将思路写在正文中。

注意:运行环境是x86 

 1.题目1

 思路

        &a是取到了整个数组的地址,值为首元素的地址,+1的步长是整个数组,所以+1之后指针指向了下图所示的位置,此时它的类型是Int(*)[5],是一个数组指针。

        此时强转指针的类型为int*,其实就是改变了指针移动的步长,跳过一个整型;查看输出内容,a+1是第二个元素的地址再解引用是第二个元素2,指针ptr-1,刚刚已经说明步长已经发生改变,所以这里指针向前挪动一个元素,答案是5;

答案:2 5

 2.题目2

思路:

        首先定义了一个结构体指针p,已知结构体变量是20字节。

①输出结构体指针+1,这里步长是一个结构体,一个结构体是20字节,所以要加20,转换成16进制就是:0x100014;

②将指针转成整型,再加一,其实直接就是数值+1,0x100001;

③将指针转换成整型指针,加一,就是加四个字节,0x100004

答案:0x100014;0x100001;0x100004

 3.题目3

思路:

          第一个输出结果是4,这是因为先取出整个数组的地址再+1,指针在4的后面,强转成int*了,ptr[-1]等价于*(ptr - 1) ,就是元素4;

        第二个输出结果是2000000,首先将整个数组的地址强转成整型再+1,这里的整型是直接+1,举一个例子如下图,如果是整型+1直接跳过一个整型,但是这里是转换成整型+1,就跟数字加法一样直接加一。

这里的每一个元素都是四个字节存储,+1之后只是跳过了一个字节,记住vs是小端存储,数字的低位在低地址,具体的内存图如下。 int*解引用之后,得到了02 00 00 00,输出就是20 00 000

4.题目4

答案:1

解析:易错题,注意数组大括号的内部是小括号,这里考察逗号表达式,(0,1)这里的结果是1;(2,3)结果是3,以此类推...所以数组存放了三个元素:1,3,5;p指针指向第一行,p[0]是*(p+0)所以即求第一行第一个元素,即1;

5.题目5

分析:

        a是首元素地址,也就是一维数组的地址,类型是int(*)[5];p的类型是int(*)[4],这里显然类型不匹配,但是依旧强行赋值;此时p+1会跳过4个整型;a[4][2]很容易找到,p[4][2]等价于*(*(p+4)+2)首先,p先加4,每加1跳过四个字节,解引用之后就是int*了,每次跳过一个字节,跳两个字节,最后取地址。下图蓝色的部分就是p[4][2],红色的部分是a[4][2]。

        使用整型打印那就是小地址-大地址 = -4;如果按照指针打印就看-4如何在内存中存储了;

-4的原码反码补码如下,按照%d的格式进行打印的是原码,按照%p格式打印的是地址,而内存中存储的就是地址,也就是补码,转换成16进制输出那就是:FFFFFFFC

答案;FFFFFFFC,-4

6.题目6

答案:10,5

分析:第一个取二维数组的地址+1,跳过整个数组,强转int*输出再-1,即输出最后一个元素10;

第二个aa是首元素的地址,即第一行的地址,即一维数组的地址,+1之后就是第二行的地址,再解引用那就是第二行首元素的地址,即6的地址,再-1,最后输出就是5;

7.题目7

分析:

内存示意图如下,char* *pa,可以这么理解:指针*pa指向的是一个char*的元素,所以pa++的时候会跳过一个char*的,直接跳到了at的地址,所以输出at。

答案:at

8.题目8(最难)

分析:画出三种指针的内存图;

①cpp自增1,指向c+2的地址,解引用拿到c+2(POINT的地址),,再解引用得到P的地址,打印得到:POINT。

②cpp自增1,从c+2到c+1,再解引用得到NEW的地址,再--得到ENTER的地址,再解引用得到E的地址,再+3得到E的地址,打印输出ER。

③cpp[-2]等价于*(cpp-2),cpp从c+1的位置回到了c+3的位置,解引用得到c+3,即FIRST的地址,再解引用得到F的地址,最后+3得到S的地址,输出ST。

④cpp[-1][-1]等价于*(*(cpp - 1) -1),cpp在c+1的位置-1之后在c+2的位置,解引用得到c+2,即POINT的地址,再-1得到NEW的地址,最后解引用得到N的地址,最后+1得到E的地址,输出EW。

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

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

相关文章

一文读懂现代卷积神经网络—稠密连接网络(DenseNet)

目录 什么是 DenseNet? 稠密块(Dense Block)详解 一、稠密块的核心思想 二、稠密块的结构组成 1. 卷积单元(的结构) 2. 密集连接的具体方式 3. 关键参数:增长率(Growth Rate, k&#xff0…

关于僵尸进程

深入理解僵尸进程:成因、危害与解决方案 进程终止的条件 我们先了解一下进程销毁的条件: 调用了exit函数在main函数中执行了return语句 无论采用哪种方式,都会有一个返回值,这个返回值由操作系统传递给该进程的父进程。操作系统不…

深入解析进程、线程与协程:现代并发编程的三大支柱

深入解析进程、线程与协程:现代并发编程的三大支柱在计算资源日益丰富的时代,理解并发执行机制已成为每位开发者的必修课。本文将带你深入探索操作系统中的三大并发模型:进程、线程与协程,揭开它们的神秘面纱。引言:并…

奇安信下一代防火墙SecGate3600

一、实验拓扑:二、实验目的(1)让内网可以访问外网。(2)让外网能够访问dmz区域的web服务器。(3)测试防火墙的防毒功能,并进行检测。三、实验步骤(1)防火墙配置…

基于STM32的智能抽水灌溉系统设计(蓝牙版)

✌️✌️大家好,这里是5132单片机毕设设计项目分享,今天给大家分享的是基于《基于STM32的智能抽水灌溉系统设计》。 目录 1、系统功能 2.1、硬件清单 2.2、功能介绍 2.3、控制模式 2、演示视频和实物 3、系统设计框图 4、软件设计流程图 5、原理…

CISSP知识点汇总- 通信与网络安全

CISSP知识点汇总 域1---安全与风险管理域2---资产安全域3---安全工程域4---通信与网络安全域5---访问控制域6---安全评估与测试域7---安全运营域8---应用安全开发一、安全网络架构和保护网络组件 1、OSI 7层协议模型 应用层:SMTP、HTTP、SNMP 、TELNET、 FTP、SFTP、POP3、IM…

C++怎么将可变参数传递给第三方可变参数接口

文章目录🔧 1. 使用 va_list 转发(兼容C/C的传统方案)⚙️ 2. 模板参数包转发(C11 类型安全方案)🧩 3. 替代方案:参数封装与适配**方案A:使用 std::initializer_list (同类型参数)**…

服务端实现阿里云OSS直传

介绍 阿里云上传 OSS 有两种方式,一种是普通上传,一种是客户端直传。 普通上传,就是需要先将文件上传到服务端,然后调用接口将文件上传到阿里云。 当然这种方案经常出现不合理的使用方式,即客户端充当服务端的角色&…

on-policy和offpolicy算法

一句话总结On-policy(同策略):边学边用,用当前策略生成的数据更新当前策略。例子:演员自己演完一场戏后,根据观众反馈改进演技。Off-policy(异策略):学用分离&#xff0c…

CA-IS3082W 隔离485 收发器芯片可能存在硬件BUG

RT,这个RS485 隔离收发器芯片基本上不可用。本来要买CA-IS3082WX,不小心在某宝买到了没有X 的CA-IS3082W。立创上说没有X 的版本已经停产,连对应的数据手册都找不到,全换成WX 了。 这类半双工485 收发器芯片电路一般都直接把DE 和…

dockerfile 笔记

# 设置JAVA版本 FROM openjdk:20-ea-17-jdk MAINTAINER aaa # 指定存储卷, 任何向/tmp写入的信息都不会记录到容器存储层 VOLUME /tmp # 拷贝运行JAR包 ARG JAR_FILE COPY app.jar /app.jar RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN echo "Asia/…

高德开放平台携手阿里云,面向开发者推出地图服务产品MCP Server

高德开放平台携手阿里云,面向开发者推出地图服务产品MCP Server,通过技术能力与生态资源的深度协同,助力开发者高效构建标准化地图服务,加速智能化场景落地。 高德开放平台携手阿里云,面向开发者推出MCP Server技术融合…

【论文阅读】AdaptThink: Reasoning Models Can Learn When to Think

AdaptThink: Reasoning Models Can Learn When to Think3 Motivation3.1 理论基础3.2 NoThinking在简单问题中的优势3.3 动机总结4. AdaptThink4.1 约束优化目标数学建模基本定义原始优化问题惩罚项转换归一化处理策略梯度实现优势函数定义PPO风格损失函数4.2 重要性采样策略问…

Redis高可用集群一主从复制概述

一、环境概述在分布式集群系统中为了解决服务单点故障问题,通常会把数据复制出多个副本部署到不同的机器中,满足故障恢复和负载均衡等需求。Redis也是如此,它为我们提供了复制功能,实现了相同数据的多个Redis副本。复制功能是高可…

Java 树形结构、层级结构数据构建

目录前言一、树状结构数据库存储二、工具类三、测试四、自定义树节点返回类型(只保留部分字段)1. 新增 TreeNodeDTO 类2.修改TreeUtil 类3.测试4.输出前言 有时候,开发过程中我们会遇到一些树状层级结构。 比如,公司部门组织架构…

求解线性规划模型最优解

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 既然选择了远方,当不负青春…

达梦国产数据库安装

打开ISO 、文件点击运行接受选择安装路径数据初始化 新数据库要创建数据库实例 选择一般用途数据库位置 选择所以系统用户,设置初始密码创建示例库可以选可以不选查找最近添加文件登录

互斥锁与同步锁

1. 锁的本质:解决并发问题的基石在多线程/多进程环境中,临界区(Critical Section) 是访问共享资源的代码段。锁的核心目标是确保互斥访问——任意时刻仅有一个执行单元能进入临界区。// 典型临界区示例 pthread_mutex_lock(&m…

高密度PCB板生产厂商深度解析

在电子制造领域,高密度PCB(印制电路板)作为核心基础元件,其技术精度与生产稳定性直接影响终端产品性能。本文精选五家具备核心技术优势的国内厂商,通过实地调研与行业数据验证,为读者呈现真实可信的供应商选…

力扣 hot100 Day44

98. 验证二叉搜索树 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树 //自…