【C语言进阶】指针练习题

news/2024/5/4 1:05:47/文章来源:https://blog.csdn.net/m0_73222051/article/details/128432008

写在前面

这是指有关指针的小题

正文

练习一

int main()
{int a[5][5];int (*p)[4];p=a;printf("%p,%d", &p[4][2]-&a[4][2], &p[4][2]-&a[4][2] );return 0;
}

解析:

  • a[4][2]为如图粉色部分,p[4][2]为如图蓝色部分。
  • a的类型是int (*)[5]  ,p的类型是int (*)[4],直接p=a,编译器会出警告,但p仍指向a的首元素地址
  • &p[4][2]-&a[4][2]  两地址相减,差值为两指针间的元素个数,在本题中元素个数为-4(低地址减 高地址=负数),%p打印内存中中的值,使用补码,%d打印-4

 结果:FFFFFFFC,-4


练习二

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\n",*(ptr1 - 1),*(ptr2 -1));return 0;
}

解析:

  • &aa为整个数组的地址,+1后指向了数组后面的地址,aa是数组第一行元素首元素的地址,+1后指向第二行元素的首元素的地址
  • ptr1-1意义是指针向前移动一个位置,那么就指向了10
  • ptr2-1意义是指针向前移动一个位置,那么就指向了5

结果:10,5 


练习三

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,++cpp指向c+2的地址,解引用后拿到c+2(一个地址),再解引用后,拿到POINT的首地址,结果打印POINT 
  • 第二个printf,在上一个的基础上再次++cpp后指向c+1的地址,解引用后拿到c+1(一个地址),在此基础上自减后指向c的地址,解引用后拿到ENTER的首元素地址,+1指向N,+2指向T,+3指向E,即从E开始打印字符串,结果就是ER
  • 第三个printf,*cpp[-2]+3 ⇔ * *(cpp-2)+3,cpp在两次自增的基础上-2后,指向c+3的地址,解引用后拿到c+3,再次解引用后指向FIRST的首元素地址,+1指向I,+2指向R,+3指向S,即从S开始打印字符串,结果就是ST
  • 第四个printf,cpp[-1][-1]+1 ⇔ *(*(cpp-1)-1) +1, cpp在两次自增之后指向c+1(注意cpp加减整数不影响其本身的值),cpp-1后指向c+2的地址,解引用后拿到c+2,再-1解引用后指向NEW的首元素N的地址,+1指向E,即从E开始打印字符串,结果就是EW

结果:

POINT
ER
ST
EW 


练习四

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+1,表明取出a数组的地址,+1就跳过了数组的地址,指向了数组地址后面的地址,并将其存入ptr中
  • a是首元素1的地址,+1变为2的地址,解引用后就是2
  • ptr-1指向5的地址,解引用之后就是5

结果: 2,5


写在最后

👍🏻点赞,你的认可是我创作的动力!

⭐收藏,你的青睐是我努力的方向!

✏️评论,你的意见是我进步的财富!

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

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

相关文章

Java项目:springboot药品管理系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目属于前后端分离的项目,分为两个角色药品管理员和取药处人员 药品管理员: 登录、退出、药品信息录入、药厂信息录入…

买不到的数目(蓝桥杯C/C++A组真题详解)

题目详细: 题目思路: 对于这个题有一个定理 如果 a,b 均是正整数且互质,那么由 axby,x≥0,y≥0 不能凑出的最大数是 : a*b-a-b 具体的证明过程这里就不赘述 感兴趣的同学可以自行查找 这里就提供一种思…

RabbitMQ 第二天 高级 7 RabbitMQ 高级特性 7.2 Consumer Ack

RabbitMQ 【黑马程序员RabbitMQ全套教程,rabbitmq消息中间件到实战】 文章目录RabbitMQ第二天 高级7 RabbitMQ 高级特性7.2 Consumer Ack7.2.1 Consumer Ack7.2.2 Consumer Ack 小结7.2.3 消息可靠性总结第二天 高级 7 RabbitMQ 高级特性 7.2 Consumer Ack 7.2.…

C#语言实例源码系列-伪装文件

专栏分享点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册 👉关于作者 众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中…

matlab神经网络求解最优化,matlab神经网络训练数据

1、神经网络的准确率是怎么计算的? 其实神经网络的准确率的标准是自己定义的。 我把你的例子赋予某种意义讲解: 1,期望输出[1 0 0 1],每个元素代表一个属性是否存在。像着4个元素分别表示:是否肺炎,是否肝…

你可能不知道的DOM断点调试技巧

前言 作为一个前端,DOM断点应该是我们非常熟悉的,也是我们日常工作中经常要用到的一种调试技巧;但是下面这些DOM断点调试技巧你可能不知道,且听我一一道来。 监听元素 有这样一种场景,当DOM中某个元素移除或者元素属…

数据结构---图

(一) 相关知识点 图(graph):图是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中的顶点的集合,E是图G…

从模型到服务——iDesktopX处理自动化工具实现BIM模型到三维服务发布

目录前言一、 处理自动化模型二、 算子参数设置1、 使用迭代数据集打开导出后的BIM模型2、 移除重复点、重复面和重复子对象3、 模型生成缓存4、 三维切片缓存发布5、 执行结果前言 BIM模型在SuperMap实际使用的业务流程中常常需要在桌面产品中生成缓存,然后通过iS…

QT多窗口编程与文件IO编程

目录 一、消息对话框 QMessageBox(掌握) 二、常用窗口类(掌握) 三、主窗口类 QMainWindow(重点) 四、parent参数(掌握) 五、窗口传参 5.1 成员函数/构造函数 5.2 信号槽传参 六、事件…

Android开发进阶——binder通讯学习

什么是binder 通常意义下,binder指的是一种通信机制对Server端来说,Binder指的是Binder本地对象,对于Client端来说,Binder指的是Binder代理对象对于传输过程而言,binder是可以跨进程传输的对象 Binder的基本原理 Bi…

MySQL 管理

文章目录启动及关闭 MySQL 服务器MySQL 用户设置/etc/my.cnf 文件配置管理MySQL的命令启动及关闭 MySQL 服务器 首先,我们需要通过以下命令来检查MySQL服务器是否启动: ps -ef | grep mysqld如果MySql已经启动,以上命令将输出mysql进程列表…

node.js+uni计算机毕设项目基于微信小程序的美甲预约系统(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等…

Docker安装Zookeeper教程(超详细)

生命无罪,健康万岁,我是laity。 我曾七次鄙视自己的灵魂: 第一次,当它本可进取时,却故作谦卑; 第二次,当它在空虚时,用爱欲来填充; 第三次,在困难和容易之…

【Linux】进程间通信之共享内存

目录🌈前言🌸1、System V共享内存🍡1.1、概念🍢1.2、原理🌺2、共享内存相关函数和指令🍡2.1、shmget函数(创建)🍢2.2、shmctl函数(控制)&#x1f…

【自然语言处理】【ChatGPT系列】ChatGPT的智能来自哪里?

相关博客 【自然语言处理】【ChatGPT系列】ChatGPT的智能来自哪里? 【自然语言处理】【ChatGPT系列】Chain of Thought:从大模型中引导出推理能力 【自然语言处理】【ChatGPT系列】InstructGPT:遵循人类反馈指令来训练语言模型 【自然语言处理…

基于HTML5 技术的开放自动化HMI

人机交互接口(HMI)是自动化系统中不可或缺的一部分。传统的做法是提供一个HMI 显示屏,并且通过组态软件来配置显示屏的功能,通过modbus 或者以太网与PLC 连接。 现在,事情变得复杂了许多,用户不仅需要通过专…

linux共享内存的使用

共享内存可以由多个程序同时访问的内存,能够避免进程间通信过程中的冗余数据拷贝,是IPC中最快的一种,特别适合用来作大块数据的传输。共享内存可以映射到不同的进程空间,这些进程间的数据传递就不再涉及内核。这个过程其实是把同一块物理内存…

FMOC-PEG-COOH,FMOC-PEG-acid,芴甲氧羰基-聚乙二醇-羧基试剂供应

英文名称:FMOC-PEG-COOH,FMOC-PEG-acid 中文名称:芴甲氧羰基-聚乙二醇-羧基 蛋白质、肽和其他材料通过氨基酸或其他酸活性化学组,增加溶解度和稳定性,降低免疫原性;药物修饰或缓释药物研发,新…

ARM_SMMU_下

SMMU驱动代码分析 本文主要分析linux kernel中SMMUv3的代码(drivers/iommu/arm-smmu-v3.c) linux kernel版本是linux 5.7, 体系结构是aarch64 SMMU的作用是把CPU提交给设备的VA地址,直接作为设备发出的地址,变成正确的物理地址,访问到物理内…

[~/vulhub]/log4j/CVE-2021-44228-20221225

[~/vulhub]/log4j/CVE-2021-44228 ┌──(kwkl㉿kwkl)-[~/vulhub] └─$ cd log4j/CVE-2021-44228 ┌──(kwkl㉿kwkl)-[~/vulhub/log4j/CVE-2021-44228] └─$ dir 1.png 2.png docker-compose.yml README.md README.zh-cn.md┌──(kwkl㉿kwkl)-[~/vulhub/log4j/CVE-2021…