C语言--- 指针运算笔试题详解
目录
题目1:
题目2:
题目3:
题目4:
题目5:
题目6:
题目7:
题目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;
}
解析:
a是数组首元素的地址,类型为int*,+1跳过一个元素,再解引用就是第二个元素。
&a是整个数组的地址,+1跳过整个数组,再强制类型转化为int*类型,-1就是数组最后一个元素的地址,解引用后就是最后一个元素。
答案:
2,5
题目2:
struct Test
{int Num;char* pcName;short sDate;char cha[2];short sBa[4];
}*p = (struct Test*)0x100000;
//在X86环境下
//假设结构体的⼤⼩是20个字节
//程序输出的结构是啥?
int main()
{printf("%p\n", p + 0x1);printf("%p\n", (unsigned long)p + 0x1);printf("%p\n", (unsigned int*)p + 0x1);return 0;
}
解析:
p是一个指针,类型是struct Test*,是由十六进制数字0x100000强制类型转换为struct Test*类型所得到的。
0x1就是1,p+1就是跳过一个元素,一个结构体的大小是20个字节,地址就加20,变成0x00100014.将p强制类型转化为unsigned long类型的值再加1,就是单纯的数学运算,结果是0x00100001.将p强制类型转化为unsigned int*类型的指针,+1跳过4个字节就是0x00100004

题目3:
#include <stdio.h>
int main()
{int a[3][2] = { (0, 1), (2, 3), (4, 5) };int *p;p = a[0];printf( "%d", p[0]);return 0;
}
解析:
a数组是一个二维数组,但是初始化的是用的括号,括号的结果是逗号表达式的结果,也就是最后一个逗号后面的表达式的值。这个数组初始化的值前三个分别是1,3,5,其余默认是0

a[0]是第一行的数组名,也就是第一行首元素的地址,p[0]可以写成*p,所以就是第一个元素。结果就是1.
题目4:
//假设环境是x86环境,程序输出的结果是啥?
#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;
}
解析:
二维数组的元素在内存中也是连续排列,所以a数组也可以看成一个元素个数为25个的一维数组。
a是第一行的地址,类型是int *[5],p是int *[4],&p[4][2]就可以看成第(3 * 4 + 3)个元素的地址,&a[4][2]就是第(3 * 5 + 3)个元素的地址,指针相加减得到的是地址之间的元素个数,也就是4个元素,但是值是-4,分别以十六进制和十进制打印,整数在内存中是以补码的形式存储,所以-4的十六进制,和十进制分别是

//1000 00000000 00000000 00000000 0011 原码
//1111 11111111 11111111 11111111 1100 反码
//1111 11111111 11111111 11111111 1101 补码
//F F F F F F F C
题目5:
#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跳过整个数组转化为int*类型后 ,-1向前跳过4个字节,也就是数组最后一个元素的地址,再解引用就是 10
*(aa+1)就是aa[1],第二行的数组名,第二行首元素的地址,转化为int*后,-1就是第一行最后一个元素的地址,再解引用就是5.
题目6:
#include <stdio.h>
int main()
{char *a[] = {"work","at","alibaba"};char**pa = a;pa++;printf("%s\n", *pa);return 0;
}
解析:
a数组是一个元素类型为char*类型的地址,a是数组名,也是数组首元素的地址,也就是一个二级指针,因为它指向的元素也是一个指针,pa++,就变成了第二个元素的地址,解引用后就是字符串at。
题目7:
#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是cp数组首元素的地址,也就是c+3的地址//++cpp,就变成了c+2的地址//*++cpp,就是c+2//c是"ENTER"的地址//c+2就是"POINT"的地址//再解引用就是"POINT"//打印POINTprintf("%s\n", *-- * ++cpp + 3);//++cpp,就变成了c+1的地址//*++cpp,就是C+1,//c+1就是"NEW"的地址//再--,就是"ENTER"的地址//再*就是"ENTER",首字符的地址,然后+3,就是"E"的地址,// 最后打印ERprintf("%s\n", *cpp[-2] + 3);//cpp[-2]就是*(cpp-2)//cpp-2就是C+3的地址//*后就是C+3//再*就是"FIRST",然后加3,就是"S"的地址,//打印STprintf("%s\n", cpp[-1][-1] + 1);//cpp[-1][-1]就是*(*(cpp-1)-1)//cpp-1就是C+2的地址,//*后就是C+2,-1,就是C+1//C+1是"NEW"的地址,*后就是"NEW",+1就是"E"的地址,//打印EW
相关文章:
C语言--- 指针运算笔试题详解
目录 题目1: 题目2: 题目3: 题目4: 题目5: 题目6: 题目7: 题目1: #include <stdio.h> int main() {int a[5] { 1, 2, 3, 4, 5 };int *ptr (int *)(&a 1);print…...
甘特图是什么,怎么制作?一文让你看懂
甘特图是什么 甘特图是一种项目管理工具,通过图形化的方式直观的能体现出任务、进度和资源在时间里的关系。 白话文就是: 项目分解成了哪些任务?每天计划做什么任务?当前每个任务的进度是多少?项目整体进度是多少?这个项目有…...
mysql笔记:6. 存储引擎
文章目录 查看引擎信息常用引擎介绍InnoDBMyISAMMEMORY存储引擎的选择 数据库存储引擎是数据库底层组件,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等,使用不同的存储引擎&#…...
(golang)切片何时会创建新切片或影响原切片
什么时候切片操作会影响原切片 // 1.切片后没有触发slice的扩容机制时 什么时候对切片操作会创建新切片不影响原切片 // 2.对切片头元素进行截取的时候 // 3.当使用append时,len > cap则会触发扩容机制 前置: //slice结构体 type SliceHeader struct…...
前端面试——W3C标准及规范
W3C标准 1、万维网联盟标准不是某一个标准,而是一些列标准的集合。 简单来说可以分为结构、表现和行为 结构 主要是有HTML标签组成 表现 即指css样式表 行为 主要是有js、dom组成 web标准一般是将该三部分独立分开,使其更具有模块化。但一般产生行为时&…...
读算法的陷阱:超级平台、算法垄断与场景欺骗笔记07_价格歧视
1. 行为歧视 1.1. 单个企业通过使用数据驱动的算法,从而更好地实现锁定客户、开展个性化营销与定价的目的 1.2. 市场环境再次发生了变化 1.2.1. 在共谋场景中,定价算法提高了企业经营者在销量数据上的透明性…...
数据结构 之 链表LinkedList
目录 1. ArrayList的缺陷: 2. 链表: 2.1 链表的概念及结构: 3. 链表的使用和模拟实现: 3.1 构造方法: 3.2 模拟实现: 4. 源码分享: 在我学习顺序表之后,我就立马开始了链表的学…...
事务【MySQL】
事务的概念 引入 在 A 转账 100 元给 B 的过程中,如果在 A 的账户已经减去了 100 元,B 的账户还未加上 100 元之前断网,那么这 100 元将会凭空消失。对于转账这件事,转出和转入这两件事应该是绑定在一起的,任意一个动…...
Anaconda 的一些配置
Anaconda 安装及修改环境默认位置 https://blog.csdn.net/qq_54562136/article/details/128932352 最重要的一步!!!!!改文件夹权限 Anaconda创建、激活、退出、删除虚拟环境 修改pip install 默认安装路径...
利用Nginx正向代理实现局域网电脑访问外网
引言 在网络环境中,有时候我们需要让局域网内的电脑访问外网,但是由于网络策略或其他原因,直接访问外网是不可行的。这时候,可以借助 Nginx 来搭建一个正向代理服务器,实现局域网内电脑通过 Nginx 转发访问外网的需求…...
SpringMVC03、HelloSpring
3、HelloSpring 3.1、配置版 新建一个Moudle , springmvc-02-hello , 添加web的支持! 确定导入了SpringMVC 的依赖! 配置web.xml , 注册DispatcherServlet <?xml version"1.0" encoding"UTF-8…...
IOS面试题object-c 1-10
1、简述Object-C的理解与特性? OC 作为一门 面向对象 的语言,自然具有面向对象的语言特性:封装、继承、多态。 它既具有 静态语言的特性(如C),又有 动态语言的效率(动态绑定、动态加载等&#…...
原生JavaScript,根据后端返回扁平JSON动态【动态列头、动态数据】生成表格数据
前期准备: JQ下载地址: https://jquery.com/ <!DOCTYPE html> <html><head><meta charset"utf-8"><title>JSON动态生成表格数据,动态列头拼接</title><style>table {width: 800px;text-align: cen…...
hadoop报错:HADOOP_HOME and hadoop.home.dir are unset. 解决方法
参考:https://blog.csdn.net/weixin_45735242/article/details/120579387 解决方法 1.下载apache-hadoop-3.1.0-winutils-master 官网下载地址: https://github.com/s911415/apache-hadoop-3.1.0-winutils win配置系统环境: 然后重启idea…...
基于Springboot的高校物品捐赠管理系统(有报告)。Javaee项目,springboot项目。
演示视频: 基于Springboot的高校物品捐赠管理系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系…...
【硬件工程师面经整理29_FPGA】
文章目录 1 nand nor的区别,速度差异的原因?2 nand驱动方式?3 异步信号处理方法4 异步FIFO的深度是如何计算的5 异步复位同步释放的优缺点6 问了FPGA的内部组成?7 LE中查找表的实现原理?8 IOB的主要组成部分࿱…...
Ping工作原理
文章目录 目的ping网络协议 OSIICMP什么是ICMP作用功能报文类型查询报文类型差错报文类型ICMP 在 IPv4 和 IPv6 的封装ICMP 在 IPv4 协议中的封装ICMP 在 IPv6 协议中的封装ICMP 头部日常ping 排除步骤ping 查询报文使用code扩展目的 本文主要是梳理ping的工作原理- 揭开 ICMP…...
python调用jar中java方法 静态类为例
java package test;public class test {// run方法返回当前脚本路径public static String runV1(String s) {return "log: " System.getProperty(s);}}python import jpype from jpype import * import osif __name__ "__main__":print(os.environ[JAV…...
tcp服务器客户端通信(socket编程)
目录 1.编程流程 2.代码演示 2.1 服务器代码 2.2 客户端代码 3.注意 3.1 ping命令 3.2 netstat命令 3.3 为什么memset? 3.4 哪个会阻塞? 3.5 显示连接信息 1.概念 1.1 编程流程 1.2 connect与listen connect方法执行后,会进行三次握手,建立连…...
chatgpt 镜像站汇总
无需登录直接可用的: ChatGPT Web - GPT-3.5-16k免费使用,吐字块,每日20次数,不需要登陆思研AI - 免费时限制每小时6次提问https://chatgpt.nicelinks.site/ - 免费使用频次有限制抱歉,站点已暂停 - 免费由开发者提供A…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...
基于Java+VUE+MariaDB实现(Web)仿小米商城
仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...
