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

news2024/11/23 13:02:30

写在前面

这是指有关指针的小题

正文

练习一

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.coloradmin.cn/o/115148.html

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

相关文章

【ROS通信机制实战练习】通过话题发布实现turtlesim小乌龟圆周运动

本节记录下使用ROS中的话题机制,实现turtlesim中小乌龟的圆周运动。 如果想通过话题通信机制,实现小乌龟的圆周运动,需要首先明确小乌龟的运动情况,以及所涉及的指挥运动的参数,这里需要首先手动发布一个turtlesim的节…

springboot整合mybatis代码快速生成

特别说明:本次项目整合基于idea进行的,如果使用Eclipse可能操作会略有不同,不过总的来说不影响。 springboot整合之如何选择版本及项目搭建 springboot整合之版本号统一管理 springboot整合mybatis-plusdurid数据库连接池 springboot整合…

String 字符串

String 基本介绍 String 应该是 Java 中最常用的一个对象&#xff0c;他不是八种基本数据类型的其中之一&#xff0c;但是随便翻了一下项目代码&#xff0c;用 String 定义的变量超过百分之八十。 public final class Stringimplements java.io.Serializable, Comparable<…

VUE3-计算属性和监听器《五》

目录 一&#xff0c;计算属性 二&#xff0c;监听器 在vue3种&#xff0c;当界面上需要处理一些数据的时候&#xff0c;可以通过计算属性和监听器处理&#xff0c;他们都是对一个属性进行操作的&#xff0c;然后返回数据。 他们的区别是&#xff0c;计算属性&#xff0c;是通…

20221226英语学习

今日短文 When we are shown two options, our eyes tend to flick from one to the other and back again several times as we deliberate on the pros and cons of each. Researchers at Johns Hopkins University in the US have found that the speed with which our ey…

Hbase是什么?

Hadoop Database简介表结构数据只能读不能改>生成新版本总结简介 永远的百度百科 HBase是一个分布式的、面向列的开源数据库&#xff0c;一个结构化数据的分布式存储系统”。 HBase不同于一般的关系数据库&#xff0c;它是一个适合于非结构化数据存储的数据库。另一个不同的…

过年首秀 - 用python写一个自动生成春联的软件并打包exe

前言 哈喽啊&#xff0c;我亲爱的铁铁们&#xff0c;I am back &#xff01;&#xff01; 别管&#xff0c;我也是阳过的人了&#xff0c;这么久都没有更新&#xff0c;今天就带来个小玩意吧 这不是过完圣诞就要过年了吗 这不得准备准备&#xff0c;春节的表演&#xff1f;…

excel数据处理技巧:组合函数统计产品批号

这是一个看似普通的编号问题&#xff0c;可竟然动用了TEXT和SUMPRODUCT两个重量级的函数共同出手才得以解决。以往遇到的编号问题&#xff0c;大多数都是COUNTIF的拿手好戏&#xff0c;但是今天这个问题COUNTIF完全插不上手&#xff0c;来看看模拟的数据吧。 如图所示&#xff…

「 理财与风险控制|养老系列」你想象中的高端养老社区是什么样?

本文主要介绍为什么养老规划需要考虑养老社区的部分&#xff0c;当前市场上养老社区的各种现状&#xff0c;养老社区从各个角度分类&#xff0c;选择养老社区需要关注的要素以及保险保单能够提供的养老权益是怎样的 文章目录01 为什么要关注养老社区&#xff1f;02 为什么关注高…

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

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

劳动自由——你真的理解马克思说的劳动吗

目录 一、空谈“劳动是一切财富和一切文化的源泉”是错误的 个人理解——剥削与马斯洛需求的满足程度 二、马克思对劳动的定义是什么 三、马克思所说的劳动自由 1、实现劳动自由的实现路径 2、劳动自由的状态 一、空谈“劳动是一切财富和一切文化的源泉”是错误的 空谈所…

ES6 模块化、webpack、@ 代表src目录的设置

文章目录webpackSource Map 代表src目录的设置ES6 模块化要求默认 导出默认导入按需 导出、导入混合使用直接导入 并执行模块中的代码webpack 默认 约定&#xff1a; 自定义 打包的 入口与出口 const path require(path) // 导入node.js中 专门操作路径的模块 module.expor…

从华科到清华这些年,我和焦虑成为朋友

Datawhale干货 作者&#xff1a;赵子一&#xff0c;清华大学&#xff0c;Datawhale成员硕士求职碰壁被今年的求职形势狠狠地“教育”了一番2021年的秋天开启了我读硕士的第三个年头。当时的我还在某家公司做实习生。本来是可以转正的&#xff0c;但是出于各种考虑&#xff0c;我…

C++:STL:常用容器(上):deque容器

1&#xff1a;deque容器的基本概念 功能&#xff1a; 双端数组&#xff0c;可以对头端进行插入和删除操作。 deque 与vector区别 1&#xff1a;vector对于头部的插入删除效率低&#xff0c;数据量越大&#xff0c;效率越低。 2&#xff1a;deque相对而言&#xff0c;对头部的插…

产品第一性原理提升数据转化

小飞象交流会答应自己的事就尽力去做到&#xff0c;要去的地方就努力去抵达。内部交流│18期产品第一性原理提升数据转化data analysis●●●●分享人&#xff1a;永波&#xff08;阿外&#xff09;‍数据分析需要透过现象看本质&#xff0c;先从纷繁复杂的表象中进行抽丝剥茧&…

【HTML】2023跨年烟花代码

*2022年圣诞节到来啦&#xff0c;很高兴这次我们又能一起度过~ &#x1f4c2;文章目录前言效果展示一、夜景烟花绽放动画效果HTML源码2023年(新年)春节倒计时代码源码2023除夕倒计时效果展示源码宇宙星空-效果展示1.源码2.思路3.步骤(js部分)更多干货&#x1f680;前言 时光荏苒…

图像处理:Tiler制作你的专属卡通头像和LOGO(圣诞特别篇)

目录0 前言1 安装与贴图2 算法原理2.1 计算像素频率2.2 计算像素相对距离2.3 计算合适贴图3 配置功能4 使用&#xff1a;以圣诞老人为例0 前言 Tiler是一种使用各种其他较小图像平铺创建新图像的工具&#xff0c;它与其他马赛克工具不同&#xff0c;因为它可以适应多种形状、大…

微信开放平台之第三方平台开发,模板小程序如何提交?

大家好&#xff0c;我是悟空码字 12月25日&#xff0c;天气晴朗&#xff0c;阳光普照&#xff0c;今天是圣诞节。因为疫情影响&#xff0c;小羊人的增多&#xff0c;街上放眼望去&#xff0c;人烟稀少。楼下除了几个十一二岁的小男孩在玩耍&#xff0c;也没有像往日老人悠闲打…

Java --- JUC之线程中断机制

目录 一、什么是中断机制 二、三大中断方法 2.1、如何停止中断运行中的线程&#xff1f; 2.1.1、通过volatile实现线程中断停止 2.1.2、通过AtomicBoolean实现线程中断停止 2.1.3、通过interrupt()实现线程中断停止 2.2、interrupted()方法使用 一、什么是中断机制 一个…

如何定制化Spring Boot Starter,这次我终于学会了

文章目录什么是Spring Boot Starter实现步骤启动器自动配置包总结自定义Starter的实现逻辑Spring Boot Starter官网描述&#xff1a;Spring Boot Starter官方介绍 什么是Spring Boot Starter Starters可以理解为启动器&#xff0c;它包含了一系列可以集成到应用里面的依赖包&…