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

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.mfbz.cn/a/459860.html

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

相关文章

this是什么?为什么要改变this?怎么改变 this 指向?

目录 this 是什么&#xff1f; 箭头函数中的 this 为什么要改变 this 指向&#xff1f; 改变 this 指向的三种方法 call(无数个参数) apply(两个参数) bind(无数个参数) this 是什么&#xff1f; 在对象方法中&#xff0c;this 指的是所有者对象&#xff08;方法的拥有者…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:Navigator)

路由容器组件&#xff0c;提供路由跳转能力。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 可以包含子组件。 接口 Navigator(value?: {target: string, type?: NavigationType}) …

网络安全之URL过滤

知识改变命运&#xff0c;技术就是要分享&#xff0c;有问题随时联系&#xff0c;免费答疑&#xff0c;欢迎联系&#xff01; URL过滤是一种针对用户的URL请求进行上网控制的技术&#xff0c;通过允许或禁止用户访问某些网页资源&#xff0c;达到规范上网行为和降低安全风险…

前端项目(vue3)自动化部署(Gitlab CI/CD)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

VUE 运行NPM 报错:npm ERR! code CERT_HAS_EXPIRED 解决方案

现象 由于各种原因需要调试一下VUE代码&#xff0c;用Git拉下来运行不了&#xff08;之前是可以正常运行的&#xff09;&#xff0c;报错为&#xff1a;npm ERR! code CERT_HAS_EXPIRED........... 原因 NPM 证书签名过期了 解决方法 第一步&#xff1a;CMD 命令 查看NPM代理源…

计算机设计大赛 题目:基于卷积神经网络的手写字符识别 - 深度学习

文章目录 0 前言1 简介2 LeNet-5 模型的介绍2.1 结构解析2.2 C1层2.3 S2层S2层和C3层连接 2.4 F6与C5层 3 写数字识别算法模型的构建3.1 输入层设计3.2 激活函数的选取3.3 卷积层设计3.4 降采样层3.5 输出层设计 4 网络模型的总体结构5 部分实现代码6 在线手写识别7 最后 0 前言…

文件操作与IO流

文章目录 File文件操作类IO流原理及流的分类节点流FileInputStreamFileOutputStreamFileReaderFileWriter 处理流BufferedReaderBufferedWriterBufferedInputStreamBufferedOutputStreamObjectInputStreamObjectOutputStreamPrintStreamPrintWriter 标准输入输出流 Properties …

Sublime Text简介、下载、安装、汉化、常用插件和激活——《跟老吕学Python编程》附录资料

Sublime Text简介、下载、安装、汉化、常用插件和激活——《跟老吕学Python编程》附录资料 Sublime Text 简介Sublime Text 下载、安装、汉化、常用插件和激活Sublime Text 官网Sublime Text 下载Sublime Text 安装1.安装2.右键菜单3.启动安装4.耐心等待5.安装完成 Sublime Tex…

实验一:关联规则 (见U盘)

实验名称 关联规则 实验时间 3月 14 日星期 四 第3.4节 实验目的 利用 Python 对关联规则算法进行调用。能够使用 Python 调用关联规则算法。首先使用apriori ,fpgrowth 或者 fpmax 函数来找出频繁项集&#xff0c;然后使用 association_rules …

vivado Placement、时钟和I/O放置、全局布局、详细布局和布局后优化

安置 Vivado Design Suite放置程序将网表中的单元放置到目标AMD中的特定站点上装置与其他实现命令一样&#xff0c;Vivado放置程序工作于并更新&#xff0c;内存中的设计。 设计布局优化 Vivado砂矿器同时优化了以下方面的设计布局&#xff1a; •定时松弛&#xff1a;选择…

不囤货不进货的“抖音小店”,到底靠啥盈利?内行人道出背后原因

大家好&#xff0c;我是电商花花。 在互联网的快速发展下&#xff0c;网购给人们带来了很大的便利&#xff0c;而网络下的电商也是发展迅速&#xff0c;带动了很多人想要创业做电商&#xff0c;找副业的想法。 随着抖音直播电商的快速崛起&#xff0c;抖音小店和无货源运营的…

如何把Spring的Bean注入到Quartz中

前言 今天写Quartz定时调度的时候遇到了想调用增删改查操作数据库的情况 这时候在Quartz容器中 直接注入bean 但是会出现bean为空的情况&#xff0c; 一、为什么为空 这种情况是因为Quartz容器 中 它读取不到Spring 容器中的bean&#xff0c;所以我们需要加一些方法让他读到 …

2024年【危险化学品经营单位安全管理人员】考试及危险化学品经营单位安全管理人员考试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 危险化学品经营单位安全管理人员考试根据新危险化学品经营单位安全管理人员考试大纲要求&#xff0c;安全生产模拟考试一点通将危险化学品经营单位安全管理人员模拟考试试题进行汇编&#xff0c;组成一套危险化学品经…

[JavaWeb学习日记]Vue工程,springboot工程整合Mybatis,数据库索引

目录 一.Vue工程 安装NodeJS与Vue-cli Vue项目创建 启动Vue项目&#xff1a;点击npm脚本serve 改端口&#xff1a;在vue.config.js下 Vue文件组成&#xff1a;templatescriptstyle 使用element 前端服务器当前使用Ngix 主要编写的文件 二.SpringBoot的Web工程 启动带…

Spring boot java: 无效的目标发行版: 18

idea 搭建spring boot 报错java: 无效的目标发行版: 18 本人jdk 1.8 解决方案如下&#xff1a;

Filter实现请求日志记录

将锁有得外部访问都记录在日志文件里面&#xff0c;设计这个功能是为了&#xff08;为什么&#xff09;&#xff1a; 1. 在不引入Promentheus进行接口监控时&#xff0c;基于日志文件就可以实现整个项目得监控。 2. 当出现问题时&#xff0c;可以基于此进行流量重放。 效果如…

HNU-计算机系统-实验1-原型机vspm1.0-(二周目玩家视角)

前言 二周目玩家&#xff0c;浅试一下这次的原型机实验。总体感觉跟上一年的很相似&#xff0c;但还是有所不同。 可以比较明显地感觉到&#xff0c;这个界面越来越好看了&#xff0c;可操作与可探索的功能也越来越多了。 我们HNU的SYSTEM真的越来越好了&#xff01;&#x…

图像处理与视觉感知---期末复习重点(3)

文章目录 一、空间域和频率域二、傅里叶变换三、频率域图像增强 一、空间域和频率域 1. 空间域&#xff1a;即所说的像素域&#xff0c;在空间域的处理就是在像素级的处理&#xff0c;如在像素级的图像叠加。通过傅立叶变换后&#xff0c;得到的是图像的频谱&#xff0c;表示图…

ElasticSearch 看这一篇就够了,详解!!!

目录 核心概念 索引 映射 文档 基本操作 索引 创建 查询 删除 映射 创建 查询 文档 添加文档 查询文档 删除文档 更新文档 批量操作 高级查询 说明 语法 常见检索 查询所有[match_all] 关键词查询(term) 范围查询[range] 前缀查询[prefix] 通配符查询…

【智能算法】人工水母搜索算法(JS)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.代码实现4.参考文献 1.背景 2020年&#xff0c;Chou 等人受到水母运动行为启发&#xff0c;提出了人工水母搜索算法(Artificial Jellyfish Search Optimizer, JS)。 2.算法原理 2.1算法思想 JS模拟了水母的搜索行为&#xf…
最新文章