C语言——指针题目“指针探测器“
如果你觉得你指针学的自我感觉良好,甚至已经到达了炉火纯青的地步,不妨来试试这道题目?
#include<stdio.h>
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);
}
程序的运行结果是什么? 运用自己的指针理解,不妨尝试下。
答案

解析


char**cp作为二级指针存储了一级指针c数组的内容,并且把c数组内容反向拷贝到了cp指针数组。
且三级指针***cpp存储的二级指针**cp的地址,且指向cp中指针数组中第一个元素(FIRST)。
前置++的优先级是高于解引用*的优先级的 因此我们先++cpp 再解引用++cpp的空间
![]()
cpp是指向cp指针数组元素中第一个元素(FRIST),++cpp相当于跳过char**(cp+1)字节空间 也就是一个指针变量大小4/8
在32位环境下指针变量大小是4 64位环境下指针变量大小是8
原本cpp指向cp中c+3元素(FIRST),前置++跳过char**(cp+1)字节大小,*cpp指向了cp中c+2元素(POINT),**cpp再解引用cp指针数组中c+2中元素(POINT)的全部内容,因此第一个打印POINT。

第二个一样要先考虑优先级的问题,前置++要高于前置--的优先级,+的优先级最低
但一定要记住前置++和前置--是有改变性的,第一次打印%s内容时++cpp了 因此这次cpp指向的是cp指针数组中c+3元素(POINT)的位置。

先++cpp 指向了cp指针数组中c+1的位置

再* ++cpp 获得cp指针数组中c+1元素的全部内容

然后*-- c+1-1=c 获得了cp指针数组中c位置(ENTER)的全部内容

最后在+3是E的位置,在依次打印,就输出ER

*cpp[-2]可以理解为**(cpp-2) **(cpp-2)+3 优先级+是最低的
![]()
cpp-2指向cp指针数组中c+3的位置 再解引用获得了cp指针数组中c+3元素的全部内容(FIRST)
最后+3是S的位置 因此输出ST

cpp[-1][-1]可以理解为*(*(cpp-1)-1)+1

因为前面第二次打印时,cpp指向的是cp指针数组中c+1的位置 第三次打印并没有改变cpp的指向的位置

所以写(*(cpp-1))指向cp指针中c+2的位置

(*(cpp-1)-1) cp指针数组中c+2位置-1 变成c+1位置

*(*(cpp-1)-1)再次解引用获得cp指针数组中c+1元素的全部内容NEW
*(*(cpp-1)-1)+1是E的位置,因此输出EW。
相关文章:
C语言——指针题目“指针探测器“
如果你觉得你指针学的自我感觉良好,甚至已经到达了炉火纯青的地步,不妨来试试这道题目? #include<stdio.h> int main() {char* c[] { "ENTER","NEW","POINT","FIRST" };char** cp[] { c 3…...
Hive讲课笔记:内部表与外部表
文章目录 一、导言二、内部表1.1 什么是内部表1.1.1 内部表的定义1.1.2 内部表的关键特性 1.2 创建与操作内部表1.2.1 创建并查看数据库1.2.2 在park数据库里创建student表1.2.3 在student表插入一条记录1.2.4 通过HDFS WebUI查看数据库与表 三、外部表2.1 什么是外部表2.2 创建…...
Docker本地部署开源浏览器Firefox并远程访问进行测试
文章目录 1. 部署Firefox2. 本地访问Firefox3. Linux安装Cpolar4. 配置Firefox公网地址5. 远程访问Firefox6. 固定Firefox公网地址7. 固定地址访问Firefox Firefox是一款免费开源的网页浏览器,由Mozilla基金会开发和维护。它是第一个成功挑战微软Internet Explorer浏…...
PHP:服务器端脚本语言的瑰宝
PHP(Hypertext Preprocessor)是一种广泛应用于服务器端编程的开源脚本语言,它以其简单易学、灵活性和强大的功能而成为Web开发的瑰宝。本文将深入介绍PHP的历史、特性、用途以及与生态系统的关系,为读者提供对这门语言全面的了解。…...
【MySQL】数据库并发控制:悲观锁与乐观锁的深入解析
🍎个人博客:个人主页 🏆个人专栏: 数 据 库 ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 悲观锁(Pessimistic Locking): 乐观锁(Optimistic Locking): 总结&#x…...
作业--day38
1.定义一个Person类,包含私有成员,int *age,string &name,一个Stu类,包含私有成员double *score,Person p1,写出Person类和Stu类的特殊成员函数,并写一个Stu的show函数ÿ…...
pytest 的 fixture 固件机制
一、前置说明 固件(fixture)是一些函数,pytest 会在执行测试函数之前(或之后)加载运行它们。pytest 使用 fixture 固件机制来实现测试的前置和后置操作,可以方便地设置和共享测试环境。 二、操作步骤 1. 编写测试代码 atme/demos/demo_pytest_tutorials/test_pytest_…...
分布式技术之分布式计算Stream模式
文章目录 什么是 Stream?Stream 工作原理Storm 的工作原理 实时性任务主要是针对流数据的处理,对处理时延要求很高,通常需要有常驻服务进程,等待数据的随时到来随时处理,以保证低时延。处理流数据任务的计算模式&#…...
2023年12月GESP Python五级编程题真题解析
【五级编程题1】 【试题名称】:小杨的幸运数 【问题描述】 小杨认为,所有大于等于a的完全平方数都是他的超级幸运数。 小杨还认为,所有超级幸运数的倍数都是他的幸运数。自然地,小杨的所有超级幸运数也都是幸运数。 对于一个…...
探索Apache Commons Imaging处理图像
第1章:引言 大家好,我是小黑,咱们今天来聊聊图像处理。在这个数字化日益增长的时代,图像处理已经成为了一个不可或缺的技能。不论是社交媒体上的照片编辑,还是专业领域的图像分析,图像处理无处不在。而作为…...
【11】ES6:async/await
一、概念 async/await 是 ES2017(ES8)的新特性,它是一种基于 Promise 实现的异步编程方式。async/await 也是一种语法糖。 1、async/await 实现了用同步方式来写异步代码(promise是链式调用形式写异步代码) 2、asyn…...
深入理解Java集合框架
导语: Java集合框架是Java提供的一组用于管理对象的类和接口,它是Java编程中非常重要的一部分。Java集合框架通过提供诸如List、Set、Map等数据结构,为程序员提供了一种方便、高效的管理对象的方式。本文将深入理解Java集合框架,包…...
极智嘉加快出海发展步伐,可靠产品方案获客户认可
2023年,国内本土企业加快出海征程,不少企业在出海发展中表现出了优越的集团实力与创新的产品优势,有力彰显了我国先进的科技研发实力。作为全球仓储机器人引领者,极智嘉(Geek)也在不断加快出海发展步伐&…...
运动目标检测方法的概述
目录 ① 光流法 ② 帧差法 ③ 背景差分法 ④ 混合高斯模型法 ⑤ 总结 运动目标检测技术的应用十分的广泛,尤其是在智能视频监控领域。运动目标检测为后续的图像处理等操作提供了基础,在某种程度上,决定了整个系统的性能。运动目标检测&a…...
【Qt-Edit】
Qt编程指南 ■ QTextEdit■ QLineEdit■ QLineEdit 设置正则表达式■ QPlainTextEdit■ QKeySequenceEdit■ QList<QLineEdit *> edits■■■ QTextEdit /* 实例和对象,设置位置和显示大小 */ textEdit = new QTextEdit(this)...
vue data变量不能以“_”开头,否则会产生很多怪异问题
1、 比如给子组件赋值,子组件无法得到这个值(也不是一直无法得到,设置后this.$forceUpdate() 居然可以得到), 更无法watch到 <zizujian :config"_config1"> </zizujian>this._config1 { ...…...
解释RestFUL API,以及如何使用它构建web程序
RESTful API(Representational State Transfer)是一种基于网络的软件架构风格,用于构建分布式系统。它利用 HTTP 协议中的各种方法(如 GET、POST、PUT、DELETE)来对资源进行操作,使得不同应用程序能够相互通…...
文件下载输出zip文件
文件下载输出成zip文件: 1、前端整个按钮,调js方法:(参数:param,需要下载的id,用逗号拼接) var param "?dto.id";//需要自己拼接param window.location.href "<%basePat…...
构建高效数据流转的 ETL 系统:数据库 + Serverless 函数计算的最佳实践
作者:柳下 概述 随着企业规模和数据量的增长,数据的价值越来越受到重视。数据的变化和更新变得更加频繁和复杂,因此及时捕获和处理这些变化变得至关重要。为了满足这一需求,数据库 CDC(Change Data Captureÿ…...
鸿蒙开发(二)- 鸿蒙DevEco3.X开发环境搭建
上篇说到,鸿蒙开发目前势头旺盛,头部大厂正在如火如荼地进行着,华为也对外宣称已经跟多个厂商达成合作。目前看来,对于前端或客户端开发人员来说,掌握下鸿蒙开发还是有些必要性的。如果你之前是从事Android开发的&…...
从零组装一台智能避障小车:STM32F103RCT6核心控制板、SG90舵机与HC-SR04超声波模块的软硬件联调全记录
从零构建智能避障小车:STM32F103RCT6核心与多传感器融合实战指南 在创客圈里,智能小车一直是验证嵌入式系统能力的经典项目。当传统的循迹小车已经不能满足你的技术探索欲望时,为它装上"眼睛"和"大脑",打造一…...
CATIA二次开发—API高效查询与架构解析
1. CATIA二次开发入门:从V5到V6的跨越挑战 如果你是从CATIA V5转向V6开发的工程师,可能会遇到这样的困惑:为什么在V5中得心应手的API调用方式,到了V6就完全不管用了?这就像突然从手动挡汽车换成了自动驾驶电动车&#…...
FanControl终极指南:3分钟掌握Windows风扇控制神器,告别噪音与高温困扰
FanControl终极指南:3分钟掌握Windows风扇控制神器,告别噪音与高温困扰 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://git…...
SwiftHTTP文件上传完全指南:从基础到企业级应用
SwiftHTTP文件上传完全指南:从基础到企业级应用 【免费下载链接】SwiftHTTP Thin wrapper around NSURLSession in swift. Simplifies HTTP requests. 项目地址: https://gitcode.com/gh_mirrors/sw/SwiftHTTP 在iOS和macOS开发中,SwiftHTTP文件上…...
PARD-SSM:基于概率状态空间模型的多阶段网络攻击检测
1. 项目概述在网络安全领域,传统的入侵检测系统(IDS)面临着多阶段攻击检测的严峻挑战。攻击者通常会按照"攻击链"(Kill Chain)的步骤逐步渗透系统,从最初的侦察阶段到最终的数据窃取,每个阶段的网络流量特征可能单独看起来都像是正…...
别再为PPT发愁了!用LaTeX的Beamer模板,5分钟搞定一份专业学术报告(附Overleaf/TeXstudio中文配置)
用LaTeX Beamer打造学术级演示文稿:从零开始的中文解决方案 第一次参加学术会议时,我看着自己用传统幻灯片工具制作的演示文稿,突然意识到那些花哨的过渡动画和艺术字体在严肃的学术场合显得格格不入。周围的教授们展示的都是简洁优雅的数学…...
Sketch MeaXure:3步告别设计标注烦恼的TypeScript重构方案
Sketch MeaXure:3步告别设计标注烦恼的TypeScript重构方案 【免费下载链接】sketch-meaxure 项目地址: https://gitcode.com/gh_mirrors/sk/sketch-meaxure Sketch MeaXure是一款基于TypeScript重构的Sketch设计标注插件,专为解决UI设计师与开发…...
5分钟掌握HunterPie:提升《怪物猎人:世界》狩猎效率的完整游戏辅助工具指南
5分钟掌握HunterPie:提升《怪物猎人:世界》狩猎效率的完整游戏辅助工具指南 【免费下载链接】HunterPie-legacy A complete, modern and clean overlay with Discord Rich Presence integration for Monster Hunter: World. 项目地址: https://gitcode…...
Buzz 与 PSR 标准:如何实现完美兼容的 HTTP 客户端
Buzz 与 PSR 标准:如何实现完美兼容的 HTTP 客户端 【免费下载链接】Buzz PHPs lightweight HTTP client 项目地址: https://gitcode.com/gh_mirrors/buzz/Buzz Buzz 作为 PHP 的轻量级 HTTP 客户端,通过巧妙设计实现了与 PSR 标准的深度兼容&…...
CANN昇腾算子开发套件
SetSingleOutputShape 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://g…...
