[C语言]指针笔试题

题一、

 //结构体的大小是20个字节
struct Test
 {
 int Num;
 char *pcName;
 short sDate;
 char cha[2];
 short sBa[4];
 }*p;
 //假设p 的值为0x100000。 如下表表达式的值分别为多少?
//已知,结构体Test类型的变量大小是20个字节
int main()
 {
 printf("%p\n", p + 0x1);
 printf("%p\n", (unsigned long)p + 0x1);
 printf("%p\n", (unsigned int*)p + 0x1);
 return 0;
 }

这里第一个输出结果为0x100014因为程序认为其为一个结构体,结构体加1就是跳过这个结构体因此大小加20而16进制的20为14

第二个输出结果为0x100001,将其转化成整型变量加一得到的结果即为加1后的结果

第三个输出结果为0x100004,将其转化成整型指针加一,既编译器认为其指向一个整型变量,加一后就是加四个字节

题二、

#include <stdio.h>
int main()
{
	int a[4] = { 1, 2, 3, 4 };
	int* ptr1 = (int*)(&a + 1);
	int* ptr2 = (int*)((int)a + 1);
	printf("%x,%x", ptr1[-1], *ptr2); //
	return 0;
}

我们知道整型占的字节为4个,所以对于第一个&a+1等于跳过了这个数组,对于第二个相当于取整型(int)a+1相当于跳过了一个字节因此输出分别为 

4 ; 02000000

题三、

 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;
 }

题目三要注意的是,int(*p)[4]赋值给了a第一行前四个地址给了p,为一个数组,我们知道数组加1的时候为跳过当前数组有的元素个数,因此p[4]可以写成*(p+4)既跳过了16个元素,p[4][2]可以写成*(*(p+4)+2)取跳到的第四个数组的第三个元素具体可以看图

题四、

#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;
}

我们可以画图来解这道题目,首先我们看到指针指向的地点如下图所示

对于第一行打印的代码printf("%s\n", **++cpp);我们知道cpp地址加了1,所以指向变成了如下所示

对其进行解引用就可以得到"POINT"这个字符串

对于第二个打印的代码printf("%s\n", *--*++cpp+3);我们先对cpp进行加1,让其指向cp[2]然后进行解引用,在对其地址进行减1,所以cp[2]本来只想的是c[1]现在变成了c[0]如下所示

在对其解引用既"ENTER“的字符串,然后字符串+3得到了起始位置为E的地址,打印出来就是ER

现在指针指向位置就如上图所示了,对于第三个打印代码printf("%s\n", *cpp[-2]+3);我们先对CPP起始地址-2得到cp[0]的指针变量,在对其解引用指向C[3]再加三既FIRST中S的起始地址,打印即为ST

对于第四个打印的代码printf("%s\n", cpp[-1][-1]+1);此串代码相当于(*(cpp-1)-1)既cpp先减1对应cp[1]的位置,在对其解引用的到c[2]的位置然后对其地址+1就是E的起始地址打印出来EW。

让我们看看程序最终的运行结果如何

跟我们推理的一样

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

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

相关文章

【transformer模型】一篇文章讲透

目录 引言 一、引言 二、Transformer模型的基本结构 1 编码器&#xff08;python代码片段&#xff09; 2 解码器 三、自注意力机制的工作原理 四、Transformer模型的应用场景 1 机器翻译 2 文本摘要 3 情感分析 4 语音识别 五、Transformer模型的发展现状及未来趋势…

【C语言】结构体内存对齐问题

1.结构体内存对齐 我们已经基本掌握了结构体的使用了。那我们现在必须得知道结构体在内存中是如何存储的&#xff1f;内存是如何分配的&#xff1f;所以我们得知道如何计算结构体的大小&#xff1f;这就引出了我们今天所要探讨的内容&#xff1a;结构体内存对齐。 1.1 对齐规…

Python利用pygame实现飞机大战游戏

文章目录&#xff1a; 一&#xff1a;运行效果 1.演示 2.思路和功能 二&#xff1a;代码 文件架构 Demo 必备知识&#xff1a;python图形化编程pygame游戏模块 一&#xff1a;运行效果 1.演示 效果图◕‿◕✌✌✌ Python利用pygame实现飞机大战游戏运行演示 参考&#x…

web集群-lvs-DR模式基本配置

目录 环境&#xff1a; 一、配置RS 1、安装常见软件 2、配置web服务 3、添加vip 4、arp抑制 二、配置LVS 1、添加vip 2、安装配置工具 3、配置DR 三、测试 四、脚本方式配置 1、LVS-DR 2、LVS-RS 环境&#xff1a; master lvs 192.168.80.161 no…

YOLOv5改进系列:新的颈部Eff-QAFPN(Efficientrep)结构助力涨点

一、论文理论 本文提出一种硬件友好的卷积神经网络结构,该结构类似于repvgg。在衡量网络效率时,经常使用Flops或者参数量,这些衡量指标对于硬件计算能力和内存带宽不敏感。因此,如何设计一个神经网络架构,使其有效地利用硬件计算能力和内存带宽是至关重要的。 论文地址:E…

Docker如何端口映射?

Docker是一种流行的开源容器化平台&#xff0c;它允许开发者将应用程序和其依赖资源打包到一个称为容器的可移植单元中。Docker提供了强大的管理和部署工具&#xff0c;使得应用程序可以在不同的环境中运行&#xff0c;无需担心环境配置的问题。在使用Docker部署应用程序时&…

【动态规划】【同余前缀和】【多重背包】[推荐]2902. 和带限制的子多重集合的数目

本文涉及知识点 动态规划汇总 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 C算法&#xff1a;滑动窗口总结 多重背包 LeetCode2902. 和带限制的子多重集合的数目 给你一个下标从 0 开始的非负整数数组 nums 和两个整数 l 和 r 。 请你…

golang常用库之-golang常用库之-ladon包 | 基于策略的访问控制

文章目录 golang常用库之-ladon包 | 基于策略的访问控制概念使用策略 条件 Conditions自定义conditionLadon Condition使用示例 持久化访问控制(Warden) 结合 Gin 开发一个简易 ACL 接口参考 golang常用库之-ladon包 | 基于策略的访问控制 https://github.com/ory/ladon Lado…

7 配置模板虚拟机

使用远程连接工具finalShell连接虚拟机后&#xff0c;接下来我们使用yum命令完成一些基础软件包的安装&#xff0c;以及将咱们新建的用户赋予管理员权限&#xff0c;最后关闭防火墙和卸载自带的JDK。 1. 安装epel-release 我们将使用yum命令进行安装&#xff0c;首先测试是否与…

海外重要行业媒体:知名服务商IntoTheBlock现已集成波场TRON网络分析数据

近日,领先链上分析服务提供商 IntoTheBlock 宣布已将波场 TRON 网络集成至其市场情报套件。该合作引发多家海外加密媒体关注,Crypto Slate、Crypto Briefing等均对此进行了报道,称此次合作意义深远,能帮助数百万用户更深入地了解波场TRON生态系统。 报道表示,波场TRON网络规模大…

AI时代Python金融大数据分析实战:ChatGPT让金融大数据分析插上翅膀

❤️作者主页&#xff1a;小虚竹 ❤️作者简介&#xff1a;大家好,我是小虚竹。2022年度博客之星评选TOP 10&#x1f3c6;&#xff0c;Java领域优质创作者&#x1f3c6;&#xff0c;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;掘金年度人气作…

[pytorch] detr源码浅析

[pytorch] detr源码浅析 1. backbone部分2. encoder部分3. decoder部分4. 输出预测 为之后SAM的代码分析做铺垫 1. backbone部分 detr.py中的DETR class class DETR(nn.Module):def __init__(self, backbone, transformer, num_classes, num_queries, aux_lossFalse):...def …

适配器模式与桥接模式-灵活应对变化的两种设计策略大比拼

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 &#x1f680; 转载自&#xff1a;设计模式深度解析&#xff1a;适配器模式与桥接模式-灵活应对变…

C++命名规则

如果想要有效的管理一个稍微复杂一点的体系&#xff0c;针对其中事物的一套统一、带层次结构、清晰明了的命名准则就是必不可少而且非常好用的工具。 活跃在生物学、化学、军队、监狱、黑社会、恐怖组织等各个领域内的大量有识先辈们都曾经无数次地以实际行动证明了以上公理的…

零拷贝原理+kafka中的零拷贝

零拷贝原理kafka中的零拷贝 kafka性能之零拷贝传统IO零拷贝mmp优化sendfile优化sendfile DMA scatter/gather优化Kafka是怎么使用零拷贝的 kafka性能之零拷贝 kafka中的零拷贝并不是说完全避免了上下文切换与cpu拷贝的次数, 而是减少这种拷贝次数 传统IO 传统的一次IO流程 rea…

32.768K晶振X1A000141000300适用于无人驾驶汽车电子设备

科技的发展带动电子元器件的发展电子元器件-“晶振”为现代的科技带来了巨大的贡献&#xff0c;用小小的身体发挥着大大的能量。 近两年无人驾驶汽车热度很高&#xff0c;不少汽车巨头都已入局。但这项技术的难度不小&#xff0c;相信在未来几年里&#xff0c;无人驾驶汽车这项…

【研究僧总结】回顾第1095个创作日

目录 前言一. 机缘二. 日常三. 展望 前言 感觉刚过1024不久&#xff0c;现在又来个1095创作日 一. 机缘 研究僧一直在找平台做笔记&#xff0c;方便之后的回顾总结&#xff0c;也让各位网友见证你我的成长&#xff0c;相互学习 止不住的写文止不住的成长&#xff0c;大家共同…

个人App上架步骤详解

想要成功将个人开发的App上架到应用商店&#xff0c;需要经过一系列关键步骤&#xff0c;包括注册开发者账号、准备应用材料、提交审核等。以下将对这些步骤进行详细介绍。 一、注册开发者账号 在将应用程序发布至应用商店之前&#xff0c;开发者需要注册开发者账号。目前&…

国内智能驾驶芯片领先供应商地平线智能驾驶芯片介绍

地平线国内智能驾驶芯片领先供应商&#xff0c;由国际著名机器学习专家余凯博士于2015年7月创建&#xff1b;2017年12月&#xff0c;地平线即推出了首款 智能芯片征程1和旭日1&#xff1b;2019年8月&#xff0c;宣布量产中国首款车规级智能芯片征程2并于同年10月发 布新一代AIo…

【Python】实现学校教务管理系统(附源码)

目录 1、系统需求分析1.1系统功能简介1.2 软件环境与开发工具 2.数据库设计2.1 概要结构设计2.2 逻辑结构设计 1、系统需求分析 1.1系统功能简介 教务管理系统是基于现代化的教务管理理念和信息化管理技术&#xff0c;将学生学籍管理、教学计划管理、开课计划管理、排课管理、…