操作多级(一、二、三级)指针才是我们的该有的姿态~

Hello,很有缘在这篇文章上我们相遇了,那么我就用题目巩固我们多级指针的知识,当然这里的题目是比较有点难度的,我们需要有点基础呀,如果你能轻松理解题目那说明你对指针的了解已经很有基础了呢,那废话不多说,开始进入正题了~

望喜欢


操作多级指针加减题

指针加减看似简单,但有些题目却很犀利,如下题,第一次看到它我的大脑也是很混乱呢,现在已经是已经了解通透了,现在就分享给你们了,这道题可以弄出很多知识点,需要认真剖析。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>int main()
{char* arr1[] = {"abcdefg","ABCDEF","qwertyu","QWERTY"};char** arr2[] = { arr1 + 3,arr1 + 2,arr1 + 1, arr1 };char*** arr3 = arr2;printf("%s\n",**arr3+1 );printf("%s\n",**arr2+1 );printf("%s\n",*--*++arr3+3 );printf("%s\n", **++arr3 + 2);printf("%s\n", arr3[-2][-1]+3);printf("%s\n", **arr3);return 0;
}

 我们先看一下答案吧

好,现在我们就仔细剖析,为什么计算机是这样打印的。

我们且看第一第二个打印结果的剖析:

printf("%s\n",**arr3+1 );
 printf("%s\n",**arr2+1 );

这里二级指针和三级指针为啥打印结果却一样,可能有人会想三级针针不应该在加一个“ * ”吗,那么我们就来解析一下

图中其实也解析了其实arr3里储存的是arr2[0]的地址,也就是你可以把arr3等价于arr2用,所以这里的第一行和第二行是一样的结果,且arr3用两个指针就能打印字符串,这里是我们先用两个“ * ”指向到字符串“QWERTY”,后面加1是最后执行的,然后指针指向字符串的第二位,所以打印结果如WERTY”。


 然后到第三行打印结果的解析:

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

图中我已经层层解析:

我们要知道++,- -和“ * ”的优先级是比较高的,所以这里我们

先++地址指向储存arr1+2的地址即arr2[1]的地址解引用后得到(arr1+2)再到减减(- -)变成(arr1+1),再然后解引用得到“ABCDEF”字符串,最后 +3,得到字符D的地址,打印后往后打印 “DEF”


再然后是第四行打印结果的解析 :

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

因为前面代对arr3加1过,现在arr3是指向存储arr+2的地址,这里再次++,使得arr3此时指向

arr1+1的存储地址即arr2 [2] 的地址,两次解引用后得到字符串”ABCDEF“的字符”A“的地址,再加2,得到字符”C“的地址,然后再次打印得到的结果就是”CDEF“


再然后到第五行的打印结果的解析:

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

这里需要先了解一个知识点 arr3[-2] 其实等价于 *(arr3-2) ,目前我们arr3指向的是arr2[2]的地址即储存arr1+1的地址,那么 -2 后解引用后得到arr1+3的存储地址即arr2 [0]处的地址,然后后面就是相当于*((arr1+3)-1),括号中运算完后得到*(arr1+2)解引用后得到字符串”qwertyu“的首地址,再加3得到字符 ”r“的地址,打印后就是得到”rtyu“。


现在到最后一行,很简单我们只需要知道现在arr3指向的是arr2中的哪一处的地址,可能很多人就想上面已经指向arr2[0]的地址,那么现在打印“QWERTY” ,如果这么想那就是错误的想法了。

printf("%s\n", **arr3);

这里上面的-2,只是解引用时-2指向arr2[0]的地址,但本身并未改变arr3,所以此时arr3指向的还是arr1+1的存储地址,所以两次解引用后便是”ABCDEF“了。


希望我的这篇文章让您可以理解通透指针的加减知识哦!

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

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

相关文章

Observability:可观测性的新兴趋势:GAI、AIOps、工具整合和 OpenTelemetry

作者&#xff1a;来自 Elastic Gagan Singh 查看我们 2024 年对 500 多名可观察性决策者进行的调查结果&#xff0c;了解行业的发展方向。 随着技术的快速发展&#xff0c;可观察性也在快速发展。 可观察性对于推动积极的业务成果变得至关重要&#xff0c;我们希望了解用户如…

点餐平台网站|基于springboot框架+ Mysql+Java+Tomcat的点餐平台网站设计与实现(可运行源码+数据库+设计文档+部署说明)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 管理员功能登录前台功能效果图 用户功能实现 系统功能设计 数据库E-R图设计 lunwen参…

七月论文审稿GPT第3.2版和第3.5版:通过paper-review数据集分别微调Mistral、gemma

前言 我司第二项目组一直在迭代论文审稿GPT(对应的第二项目组成员除我之外&#xff0c;包括&#xff1a;阿荀、阿李、鸿飞、文弱等人)&#xff0c;比如 七月论文审稿GPT第1版&#xff1a;通过3万多篇paper和10多万的review数据微调RWKV七月论文审稿GPT第2版&#xff1a;用一万…

结构体之成绩统计2

题目描述 有N个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入N个学生的数据,要求打印出3门课的总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩) 输入格式 学生数量N占一行每个学生的学号、姓名、三科成绩占一行,空格分开。 输出格式 各门…

使用CIP采集欧姆龙EtherNet/IP从入门到精通

本文将会从以下几个方面介绍 1.CIP是什么 2.EtherNet/IP通信是什么 3.CIP通信报文解析 4.使用CIP常用的方法和功能介绍&#xff08;UCMM&#xff09; 5.自己封装了一个类&#xff0c;只要知道标签名称&#xff0c;和数据类型即可读写数据 6.demo展示 1.CIP是什么 CIP通信…

【C#】【SAP2000】读取SAP2000中frame单元列表到Grasshopper中

private void RunScript(bool build, ref object p1, ref object p2, ref object Profile, ref object stressRatio, ref object temperatureLoad, ref object displacement, ref object frameList){if (build true){// 声明变量int ret;int Numit 0;int[] ObjType new int[…

【Datawhale组队学习:Sora原理与技术实战】使用KAN-TTS合成女生沪语音频

Sambert-Hifigan模型介绍 拼接法和参数法是两种Text-To-Speech(TTS)技术路线。近年来参数TTS系统获得了广泛的应用&#xff0c;故此处仅涉及参数法。 参数TTS系统可分为两大模块&#xff1a;前端和后端。 前端包含文本正则、分词、多音字预测、文本转音素和韵律预测等模块&am…

无序安装任何检测工具,检测端口是否打开

Linux中有个特殊的设备文件&#xff1a; /dev/tcp 允许通过该接口进行tcp网络通讯 例子&#xff1a; 测试某一台远程机器的22端口是否打开&#xff1a; echo > /dev/tcp/127.0.0.1/22 如果没有任何输出&#xff0c;则端口开放&#xff0c; 否则没有开放 利用bash 脚本批…

SLAM基础-因子图优化

前言&#xff1a; 因子图优化和BA优化、位姿图优化一样&#xff0c;其本质都是解决非线性优化的问题。如果只有路标和位姿之间的因子&#xff0c;和BA优化完全一样。不过因子图是个大筐&#xff0c;什么约束都能加&#xff0c;IMU&#xff0c;轮速计&#xff0c;GPS。 在当前…

利用数据驱动的MEG分析方法提取fMRI静息态网络

摘要 静息态网络(RSN)的电生理基础仍存在争议。特别是&#xff0c;尚未确定一个能够同样有效解释所有静息态网络的原理性机制。虽然脑磁图(MEG)和脑电图(EEG)是确定RSN电生理基础的首选方法&#xff0c;但目前没有标准的RSN分析流程。本文比较了从MEG数据中提取RSNs的两种现有…

YOLOv7_pose-Openvino和ONNXRuntime推理【CPU】

纯检测系列&#xff1a; YOLOv5-Openvino和ONNXRuntime推理【CPU】 YOLOv6-Openvino和ONNXRuntime推理【CPU】 YOLOv8-Openvino和ONNXRuntime推理【CPU】 YOLOv7-Openvino和ONNXRuntime推理【CPU】 YOLOv9-Openvino和ONNXRuntime推理【CPU】 跟踪系列&#xff1a; YOLOv5/6/7-O…

如何打造知识管理平台,只需了解这几点

随着企业的发展&#xff0c;知识资源日益丰富和复杂&#xff0c;如果不加以有效管理和整合&#xff0c;这些知识很可能会被埋没或丢失。打造知识管理平台可以将这些知识资源进行统一存储和分类&#xff0c;便于员工查找和使用&#xff0c;从而充分发挥知识的价值。有很多工具可…

细说C++反向迭代器:原理与用法

文章目录 一、引言二、反向迭代器的原理与实现细节三、模拟实现C反向迭代器反向迭代器模板类的设计反向迭代器的使用示例与测试 一、引言 迭代器与反向迭代器的概念引入 迭代器&#xff08;Iterator&#xff09;是C标准模板库&#xff08;STL&#xff09;中的一个核心概念&am…

matplotlib-直方图

日期&#xff1a;2024.03.114 内容&#xff1a;将matplotlib的常用方法做一个记录&#xff0c;方便后续查找。 # 引入需要的库 from matplotlib import pyplot as plt import numpy as np# 设置画布大小 plt.figure(figsize (20,8),dpi 200)# 全局设置中文字体 plt.rcParams…

Android NDK入门:在应用中加入C和C++的力量

目录 ​编辑 引 NDK的设计目的 与Java/Kotlin的结合 使用场景 开发流程 设置项目以支持NDK 编写本地代码 使用JNI连接本地代码和Java/Kotlin代码 编译和运行你的应用 附 引 自诩方向是android方向的移动端开发工程师&#xff0c;却从来没有真正仔细了解过NDK&#…

Swift:.ignoresSafeArea():自由布局的全方位掌握

ignoresSafeArea(_ regions : edges:)修饰符的说明 SwiftUI布局系统会调整视图的尺寸和位置&#xff0c;以避免特定的安全区域。这就确保了系统内容&#xff08;比如软件键盘&#xff09;或设备边缘不会遮挡您的视图。要将您的内容扩展到这些区域&#xff0c;您可以通过应用该修…

植物神经功能紊乱患者每天从5片黛力新减少至2片,只因找对了治疗方法!

植物神经功能紊乱是一种常见的心理疾病&#xff0c;其症状包括焦虑、失眠、疲劳、头痛、胃肠不适等&#xff0c;给患者带来很大的困扰。然而&#xff0c;这种疾病是可以治疗的。本文将介绍一位植物神经功能紊乱患者的治疗经历&#xff0c;希望能够帮助更多的人了解和治疗此病。…

生成二维码及加入logo和文字

<html> <!-- 存放二维码的容器 --> <div idqrcode></div> <script typetext/javascript srchttp://cdn.staticfile.org/jquery/2.1.1/jquery.min.js></script> <script src"https://cdn.bootcss.com/jquery.qrcode/1.0/jquery.qr…

Three.js基础入门介绍——Three.js学习七【播放模型动画时模型沿着轨迹移动】

效果描述 在播放导入的模型动画同时&#xff0c;让模型沿着预定路径轨迹移动。例如导入一个会跑步动作的模型&#xff0c;让它沿着一条类似跑道的路径跑步移动。 实现流程 基本流程 1、搭建场景 2、添加模型和播放动画 3、添加路径和模型移动 工程文件 工程文件结构如下图&…