练习-指针笔试题

目录

  • 前言
  • 一、一维整型数组
    • 1.1 题目一
    • 1.2 题目二
  • 二、二维整型数组
    • 2.1 题目一
    • 2.2 题目二
    • 2.3 题目三
  • 三、结构体
    • 3.1 题目一(32位机器运行)
  • 四、字符数组
    • 4.1 题目一
    • 4.2 题目二
  • 总结


前言

本篇文章记录关于C语言指针笔试题的介绍。


一、一维整型数组

1.1 题目一

在这里插入图片描述
题目分析

arr是首元素地址,即&arr[0]
&arr取的是整个数组的地址,类型为int(*)[5],&arr+1跳过整个数组的大小

在这里插入图片描述


1.2 题目二

在这里插入图片描述

题目分析

%x 按16进制格式输出
&arr取出的是整个数组的地址,&arr+1为跳过整个数组的地址
ptr1指向数组最后一个元素的末尾
ptr1[-1] -> *(ptr1+(-1)) ->*(ptr1-1),ptr1[-1] = 00000004
arr表示首元素地址,即&arr[0], (int)arr+1将地址强制转换为整型,进行加法运算
ptr2指向的是数组第一个元素的第二个字节,*ptr2操作四个字节,*ptr2 = 20000000

下图以32位机器为例,将1,2, 3, 4分别按16进制在内存中的存储位置如下
整数1的十六进制 00 00 00 01 高位->低位
整数2的十六进制 00 00 00 02
整数3的十六进制 00 00 00 03
整数4的十六进制 00 00 00 04
在这里插入图片描述


二、二维整型数组

2.1 题目一

在这里插入图片描述
题目分析

数组初始化时,利用了逗号表达式,逗号表达式的结果为最后一个表达式的结果,相当于以下的初始化方式
int arr[3][2] = { {1,3}, {5,0}, {0,0}};
arr[0]表示第一行的数组名,数组名表示首元素地址,相当于&arr[0][0]
则p[0] -> *(p+0) -> *( p) -> *(&arr[0][0]) -> arr[0][0] = 1


2.2 题目二

在这里插入图片描述
题目分析

指针变量p是一个数组指针,指向4个整型元素的数组
p[4][2] - >*( *(p+4) + 2)
两个相同类型指针相减的绝对值为相差的元素个数
&p[4][2]和&arr[4][2]的位置如下如所示
&p[4][2]和&arr[4][2]相差4个元素,则 &p[4][2] - & arr[4][2] = -4
-4的原反补如下
原码:1000 0000 0000 0000 0000 0000 0000 0100
反码:1111 1111 1111 1111 1111 1111 1111 1011
补码:1111 1111 1111 1111 1111 1111 1111 1100
%d输出的是原码 -4
%p输出的是地址,十六进制 ff ff ff ff ff ff ff fc

在这里插入图片描述


2.3 题目三

在这里插入图片描述
题目分析

&arr,取整个二维数组的地址,&arr+1跳过一个二维数组大小
*(arr+1),arr数组名,为首元素地址,第一行的地址,arr+1为第二行的地址
*(arr+1) -> arr[1],第二行的数组名,第二行第一个元素的地址

在这里插入图片描述


三、结构体

3.1 题目一(32位机器运行)

在这里插入图片描述
题目分析

将一个十六进制数0x100000强制转换为结构体指针变量的值,则p = 0x00100000
p+0x01,结构体指针变量p向前走一步,结构体占20个字节,则跳过20个字节,20的十六进制为00000014
00100000 + 00000010 = 00100014
(unsigned long)p+0x01,(unsigned long)p将p强制转换为一个无符号长整型,则进行整型的加法运算
00100000 + 00000001 = 00100001
(unsigned int*)p+0x01,(unsigned int*)p将p强制转换为一个整型指针变量,向前走一步跳过4个字节
00100000 + 00000004 = 00100004


四、字符数组

4.1 题目一

在这里插入图片描述
题目分析

ps为二级指针变量
str为数组名,表示首元素地址,即char*的地址
ps++, ps = ps+1,跳过一个char*的大小

在这里插入图片描述


4.2 题目二

在这里插入图片描述
题目分析

		表达式一: **++pps,++pps, pps = pps+1; pps指向ps[1]**(pps) == str[2]; 得到字符串"POINT"首元素地址表达式二: * -- * ++pps + 3, 这时的pps指向ps[1]++pps, pps = pps+1; pps指向ps[2]*(pps) == ps[2]; 得到指向str[1]的地址--*(pps),得到指向str[0]的地址*--*(pps),得到字符串"ENTER"的首元素地址*--*(pps)+3,跳过3个字符的大小,得到字符串"ENTER"中字符'E'的地址表达式三: *pps[-2]+3,这时的pps指向ps[2]pps[-2] == *(pps-2),这里的pps不会改变,但表达式(pps-2)指向的是ps[0]*(pps-2) == ps[0]*pps[-2] == *ps[0],得到指向"FIRST"的首元素地址,即字符F的地址*pps[-2] +3, 向前走三步,得到"FIRST"字符'S'的地址表达式四: pps[-1][-1]+1,这时pps指向ps[2]pps[-1][-1] == *(*(pps-1)-1);*(pps-1),得到ps[1],即得到指向str[2]的地址*(pps-1-1,得到指向str[1]的地址*(*(pps-1-1),得到字符串"NEW"首元素地址,即字符'N的地址'*(*(pps-1)-1)+1,跳过一个字符,得到字符串"NEW"中字符'E'的地址

在这里插入图片描述


总结

本篇文章解析了指针在各种数组应用的练习题,解决这种题目,最好的方法就是画图。

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

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

相关文章

36-javascript输出方式,弹框:普通,confirm弹框,prompt弹框,控制台输出:普通,warm,error

1.页面打印 <body><p>你真是一个小机灵鬼</p><script>// 页面打印document.write("打印内容");</script> </body> 2.覆盖文档 <body><p>你真是一个小机灵鬼</p><script>// 覆盖文档window.onload f…

超维空间M1无人机使用说明书——52、ROS无人机二维码识别与降落

引言&#xff1a;使用二维码引导无人机实现精准降落&#xff0c;首先需要实现对二维码的识别和定位&#xff0c;可以参考博客的二维码识别和定位内容。本小节主要是通过获取拿到的二维码位置&#xff0c;控制无人机全向的移动和降落&#xff0c;分为两种&#xff0c;一种是无人…

各种锁的概述

乐观锁与悲观锁 悲观锁指对数据被外界修改持保守态度&#xff0c;认为数据很容易就会被其他线程修改&#xff0c;所以在数据被处理前先对数据进行加锁&#xff0c;并在整个数据处理过程中&#xff0c;使数据处于锁定状态。 悲观锁的实现往往依靠数据库提供的锁机制&#xff0…

【AI视野·今日NLP 自然语言处理论文速览 第六十九期】Wed, 3 Jan 2024

AI视野今日CS.NLP 自然语言处理论文速览 Wed, 3 Jan 2024 Totally 24 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers An Autoregressive Text-to-Graph Framework for Joint Entity and Relation Extraction Authors Zaratiana Ur…

centos用yum安装mysql详细教程

1 查询安装mysql的yum源,命令如下 ls /etc/yum.repos.d/ -l 界面如下图所示&#xff0c;未显示mysql的安装源 2 安装mysql相关的yum源,例如&#xff1a; 例如&#xff1a;rpm -ivh mysql57-community-release-el7.rpm 要注意 mysql的版本和系统的版本匹配 mysql57-communi…

SpringBoot 如何增强PageHelper入参的健壮性

PageHelper.startPage(int pageNum, int pageSize, boolean count) 参数为外部输入&#xff0c;故存在异常输入场景。比如 pageNum 和 pageSize 输入的值 负数 或者 0&#xff0c;所以引入PageUtils来对入参进行判断矫正&#xff0c;从而避免引入异常。 第1步&#xff1a;支持…

【web】Springboot3 集成 Swagger3

文章目录 Maven 依赖配置类&#xff08;可选&#xff09;访问示例 Maven 依赖 <!--swagger3--> <dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><version>2.0.2</v…

总420+,专业120+南京大学851信号与系统电子信息考研经验通信,电子信息

今年考研数学130&#xff0c;专业课120&#xff0c;总分420顺利被南京大学电通录取&#xff0c;梦圆南大&#xff0c;这一年的复习有过迷茫&#xff0c;有过犹豫&#xff0c;最后都坚持过来了&#xff0c;总结一下自己的复习经验&#xff0c;希望对大家有所帮助。数学 5-8月数…

用C语言实现动态数组Vector

代码仓库地址 1. 动态数组原理 定义一个结构体类型&#xff0c;在结构体中用指针指向一个在堆空间开辟的一块内存。 2. 编写头文件 在头文件里定义Vector的数据结构和相关操作&#xff0c;可以通过修改 “typedef char* Element;” 来修改存储的数据的类型&#xff1b; #ifn…

MPEG4Extractor

1、readMetaData 必须要找到 Moov box&#xff0c;找到 Mdat box或者 Moof box&#xff0c;并且创建了 ItemTable 大端 box 分为 box header 和 box content&#xff1a; box header由8个字节组成&#xff0c;前面四个字节表示这个box 的大小&#xff08;包含这个头的8字节&a…

【Docker】Docker基础

文章目录 安装使用帮助启动命令镜像命令容器命令 安装 # 卸载旧版本 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine # 设置存储库 sudo yum install -y yum-utils …

QT自定义信号和槽

信号和槽 介绍实现创建文件对teacher的h和cpp文件进行处理对student的h和cpp文件进行处理对widget的h和cpp文件进行处理 介绍 Qt中的信号和槽是一种强大的机制&#xff0c;用于处理对象之间的通信。它们是Qt框架中实现事件驱动编程的核心部分。 信号&#xff08;Signal&#x…

pgAdmin和asdf postgres的安装

安装pgAdmin&#xff1a; curl https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo apt-key addsudo sh -c echo "deb https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/$(lsb_release -cs) pgadmin4 main" > /etc/apt/sources.list.d/pgadmi…

MyBatisPlus学习一:快速入门

前言 前面快速学习了Mybatis&#xff0c;现在开始快速学习MyBatisPlus 学习教程&#xff1a; 黑马mybatis教程全套视频教程&#xff0c;2天Mybatis框架从入门到精通 黑马程序员最新MybatisPlus全套视频教程&#xff0c;4小时快速精通mybatis-plus框架 简介 MyBatisPlus 是…

使用AutoDecoder自动解码器实现简单MNIST特征向量提取

AutoDecoder 自动解码器&#xff08;AD&#xff09;是论文"DeepSDF: Learning Continuous Signed Distance Functions for Shape Representation" 中使用的一种方法&#xff0c;与传统编码-解码结构不同&#xff0c;AD无编码器&#xff0c;仅有一个解码器。解码器实…

K-means 聚类算法分析

算法简述 K-means 算法原理 我们假定给定数据样本 X &#xff0c;包含了 n 个对象 &#xff0c;其中每一个对象都具有 m 个维度的属性。而 K-means 算法的目标就是将 n 个对象依据对象间的相似性聚集到指定的 k 个类簇中&#xff0c;每个对象属于且仅属于一个其到类簇中心距离…

Python中调用matplotlib库三维可视化图像像素曲面分布

为了更直观的从3D视角观察一副图像的像素分布&#xff0c;且拖动观察没一个像素细节&#xff0c;可以使用下面代码实现。 目录 一、代码二、效果展示 一、代码 使用代码修改修改的地方如下&#xff1a; 具体实现代码如下: import numpy as np import matplotlib.pyplot as …

windows系统如何查看扇区?

windows系统如何查看扇区&#xff1f; 首先&#xff0c;我们按WindowsR 弹出"运行"对话框&#xff0c;打开文本框输入"MSINFO32.EXE"命令 展开左侧"组件"节点 接下来&#xff0c;我们选择"组件|存储|磁盘"文件夹 在其里面即可查看硬盘…

欧科云链研究院:奔赴2024,Web3与AI共振引爆数字时代潘多拉魔盒

出品&#xff5c;欧科云链研究院 2024年&#xff0c;Web3与AI两个数字科技的巅峰碰撞&#xff0c;欧科云链研究院探索AI与Web3的技术融合&#xff0c;与澎湃科技联合发布2024年展望&#xff0c;原标题为《2024年展望&#xff1a;Web3与AI共振引爆可信数字社会》&#xff0c;共…

Linux系统下gitee使用git提交代码

Linux系统下gitee使用git提交代码 一、安装配置git1.1 在 Linux 中安装 git&#xff0c;并生成授信证书1.2 将SSH key 添加到 ssh-agent1.2 将SSH key 添加到你的gitee账户 二、gitee 的使用2.1 下载项目到本地 三、上传gitee三步走3.1 三板斧第一招&#xff1a;git add3.2 三板…