解剖一道有意思的指针题

news2024/11/16 20:59:29

这道指针题挺有意思的,将各级指针之间的联系联系起来,仔细分析会发现也不难,重在逻辑思维,做完将会加深你对指针的理解的,好好享受指针带来的乐趣吧!!!


结果是什么呢?

//题目:
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;
}

我们先把c,cp,cpp之间的关系画出来:
在这里插入图片描述
c[ ]数组里放着分别是ENTER,NEW,POINT,FIRST的首字母的地址,而cp里分别放着c+3,c+2
c+1,c,这里的c代表着c数组首元素的地址,cpp里呢存放着cp数组的首元素地址。

我们一个一个分析:
1.

	printf("%s\n", **++cpp);

cpp这个指针先+1,表示什么意思呢?cpp这个指针指向的是cp的元素的地址,cpp+1也就是cp元素的地址要+1,所以cpp指向的方向就改变了,然后再解引用找到圆圈1,圆圈1就是右边的方块,而再解引用,就是访问方块里面的圆圈2了,得到圆圈2,圆圈2就是POINT首字母的地址,所以打印的话就会打印出POINT。
在这里插入图片描述
2.
还有自增++1或者自减–,都会对变量永久性改变,所以上面的的自增仍然有效。

	printf("%s\n", *-- * ++cpp + 3);

先对cpp自增+1,然后解引用,再自减1,再解引用,最后+3.
从上图可以看出,cpp先指向cp的第二个元素的地址,这里自增+1,应该变成指向第三个元素的地址了,然后解引用找到c+1这个地址,再自减,所以c+1变成了c,所以cp这个数组的c+1指向了c,然后解引用找到ENTER的首字母地址,最后+3,就变成E字母的地址了,所以打印出来应该是ER。
在这里插入图片描述
3.

	printf("%s\n", *cpp[-2] + 3);

cpp[-2]表示什么意思呢?它可以简化成 *(cpp-2),所以这个表达式就是
**(cpp-2)+3. cpp-2,表示cpp指向的c数组的元素的地址要减2,然后解引用找到这个指针保护的地址再解引用最好+3.
在这里插入图片描述
4.
上面那个减2可不是永久性的改变喔,只是适用于上面,因为2不是自增和自减,只是-2,cpp的指向并没有改变所以cpp的指向还是解答2中的形式。

printf("%s\n", cpp[-1][-1] + 1);

这个代码可以简化成
*( *(cpp-1)-1)+1
cpp-1使cpp指向c+2,解引用找到红色方块的地址,然后又-1,方块的地址要变成上面的方块的地址了然后解引用,找到NEW的首字母地址,再+1,变成E的地址,最好打印出来应该为EW。
5.
结果:
在这里插入图片描述
总结:

  1. 要理解指针++,是什么在++
    是指针指向的元素的地址的自增,而不是单纯的指针+1
  2. 要理清楚各级指针之间的关系
  3. 数组名表示首元素地址
  4. *指针[数字]可以简化成 (指针+数字)

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

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

相关文章

FPGA 20个例程篇:19.OV7725摄像头实时采集送HDMI显示(三)

第七章 实战项目提升,完善简历 19.OV7725摄像头实时采集送HDMI显示(三) 在详细介绍过OV7725 CMOS Sensor的相关背景知识和如何初始化其内部寄存器达到输出预期视频流的目的后,就到了该例程的核心内容即把OV7725输出的视频流预先缓…

Zotero入门教程

文章目录一、生成Bibliography二、Zotero文献自动导入1. 为什么要使用SCI-HUB2. 如何自定义PDF解析器三、在Zotero中添加Extension四、文件存储位置的修改五、markdown笔记功能一、生成Bibliography 在 Document Preferences中点击“管理样式”,就可以在Zotero Styl…

我的周刊(第075期)

我的信息周刊,记录这周我看到的有价值的信息,主要针对计算机领域,内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。🎯 项目elasticvue[1]基于 Vue 的 Elasticsearch 管理客户端…

Linux常见命令 16 - 权限管理命令 chown, chgrp, umask

目录 1. 改变文件/目录所有者 chown 2. 改变文件/目录的所属组 chgrp 3. 显示文件的缺省(默认)权限 umask [-S] 1. 改变文件/目录所有者 chown 改变文件权限使用chmod,只有root和当前文件拥有者可以更改,如果想要更改目录/文件的所有者&#xff0c…

MutationObserver的示例代码的使用(附示例代码)

MutationObserver的使用 首先先介绍一下MutationObserver的特点 1.MutationObserver的回调属于微队列 2.它会在触发指定 DOM 事件时,调用指定的回调函数,说白了就是用来检测DOM节点的 MutationObserver回调函数 参数 callback 一个回调函数&#xff0…

论文投稿指南——中文核心期刊推荐(环境科学 2)

【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…

在甲骨文云容器实例(Container Instances)上部署Oracle Linux 7 Desktop

甲骨文云推出了容器实例,这是一项无服务器计算服务,可以即时运行容器,而无需管理任何服务器。 今天我们尝试一下通过容器实例部署Oracle Linux 7 Desktop。 创建容器实例 在甲骨文容器实例页面,单击"创建容器实例"&am…

分享150个PHP源码,总有一款适合您

PHP源码 分享150个PHP源码,总有一款适合您 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下..., 150个PHP源码下载链接:https://pan.baidu.com/s/1PWajFunhPFyoNFGc6F4qSQ?pwd0sq5 提取码&#…

Linux rm命令详解,Linux删除文件目录

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 rm 命令一、常用操作1. 删除文件2. 删除目录二、其他操作作用:删除文件或目录 参数: -f 直接删除&#xff0c…

steam/csgo搬砖项目真的假的?

本文全文干货分享,如果你想通过steam搬砖做副业赚钱,看这一篇就够了! 这个项目是什么意思? 是不是你也很好奇这个玩法?我们先看下我们自己的数据,再来解释一下我们怎么赚的钱 一、项目原理 利用steam平台…

【Spring5源码学习】Spring基础介绍及调试环境搭建

Spring 是一款用于简化企业级 Java 应用开发的分层开源框架,有着强大的扩展和融合能力,它善于整合各种单层框架并建立起完整的体系,能高效统一的构造可提供企业级服务的应用系统。 1、Spring 概述 Spring Framework 是一个分层非常清晰并且依…

[C++]深复制与浅复制

深复制与浅复制 C中,默认的复制构造函数只能实现浅复制。 浅复制指的是在对象复制前,只对对象中的数据成员进行简单的复制 大多数情况下"浅复制"已经能很好的工作了,但是当类的数据成员中有指针类型时,浅复制只会复制指…

Gulp.Task 正解

gulp task 实现过程 今天从源码的角度分析下 gulp 中 task 的实现过程。多个 task 是如何执行??? 等等 gulp 插件分布图 其实通过上述截图可以看到,其实整个 gulp 内部什么逻辑都没有,都是由一个一个插件组成的。上述的…

Java多线程案例之单例模式(饿汉,懒汉)

目录 一、饿汉模式 二、懒汉模式 前言:单例模式是校招中最常见的设计模式之一。下面我们来谈谈其中的两个模式:懒汉,饿汉。 何为设计模式? 设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多…

《Linux性能优化实战》学习笔记 Day04

06 | 锁:如何根据业务场景选择合适的锁? 原文摘抄 当你无法判断锁住的代码会执行多久时,应该首选互斥锁,互斥锁是一种独占锁。 如果你能确定被锁住的代码执行时间很短,就应该用自旋锁取代互斥锁。 对于 99% 的线程…

工信部电子标准院:龙蜥操作系统获评“优秀”

近日,工信部中国电子技术标准化研究院公布第二批通过开源项目成熟度评估的开源项目名单,龙蜥操作系统(Anolis OS)凭借在生态构建、技术创新、应用落地等方面的成熟能力与卓越表现,顺利通过评估并获得优秀贰级&#xff…

简单说说什么是真的懂一道题了

昨天写了Richard的2022年一年级入学小结后,后台有读者问我怎么算真的懂一个知识点了,今天来简单说两句,大家都知道,求123…n的和,高斯的幼年成名作。Richard同学在上中班的时候,我就给他科普过高大神的事迹…

2023牛客寒假算法基础集训营3 -- E-公平守望的灯塔(向量 简单几何)

题目如下: 示例1 输入 1 0 0 1输出 0 0说明 输出1 1也是可以的。 思路 or 题解: 我们可以迅速找到 CCC 有两个位置满足题意,但 CCC 的坐标不一定是整数,我们需要 checkcheckcheck MMM 是 ABABAB 的中点 我们可以求出来 AM→…

「栈和队列」简析

前言 前言:研究一个数据结构的时候,首先讲的是增删改查。 文章目录前言一、简介1. 结构2. 特点3. 存储二、栈1. 类比举例2. 操作3. 实现1)顺序栈(常用)a. 核心b. 要素c. 入栈d. 出栈2)链式栈三、队列1. 类比…

Spring的Aware接口讲解,内含几篇参考文章

Aware接口文章一、使用Aware与不使用Aware的效果二、ApplicationContext实例介绍Aware三、从Aware顶级接口实现自己的XXXAware一、使用Aware与不使用Aware的效果 参考文章:Spring中的aware接口 定义BeanNameAware接口 public interface BeanNameAware extends Aw…