C ——— 指针笔试题(最终篇)

news2024/12/28 6:24:33

指针加减整数和解引用的笔试题

boss题:

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);

代码解析:

c数组中存放了4个元素,每个元素是char*类型的地址,c数组并不是存放的4个常量字符串,而是存放的每个字符串的首字符的地址,所以c数组的每个元素是char*

cp数组中存放的是4个char** 类型的元素,c + 3 指向的是 "FIRST" 这个常量字符串中的 'F' 字符的首地址,c + 2 指向的是 "POINT" 这个常量字符串中的 'P' 字符的首地址,c + 1 指向的是 "NEW" 这个常量字符串中的 'N' 字符的首地址,c 指向的是 "ENTER" 这个常量字符串中的 'E' 字符的首地址

cpp数组存储的是cp数组的首元素地址

各个数组的关系示意图:

解析:**++cpp 

cpp 指向的是cp数组首元素地址,++cpp后指向了 cp数组第二个元素的首地址,*++cpp 解引用后找到的是 cp数组中 存储的第二个元素的地址,也就是 c + 2,**++cpp再次解引用后找到的就是c数组中的第三个元素的地址,以%s的形式打印,打印的就是c数组中的第三个常量字符串

所以 **++cpp 以%s的形式打印的结果是 "POINT" 

注意: ++cpp时,cpp就已经发生了改变,在此之后的cpp就指向了cp数组第二个元素的首地址

解析:*-- * ++cpp + 3

解析这个的结果之前,先要了解 ++ 和 * 和 -- 的优先级都高于+,所以要从cpp开始依次往左计算,最后再算 + 3 

此时的cpp指向的是cp数组中第二个元素的首地址,再次++cpp后,指向的就是cp数组中第三个元素的首地址,*++cpp 解引用后就拿到了 c + 1,也就是c数组第二个元素的首地址,--*++cpp 前置减减后就指向了c数组中第一个元素的首地址,*--*++cpp 解引用后拿到的是c数组中第一个常量字符串的首地址,最后再 +3,也就是从 "ENTER" 的首字符 'E' 中向后跳过 3个字符,得到的就是字符串 "ER"

所以 *-- * ++cpp + 3 以%s的形式打印的结果是 "ER"

注意:此时的cpp已经指向了cp数组中第三个元素的首地址

解析:*cpp[-2] + 3

[] 的优先级高于 * ,所以cpp先和[-2]结合,cpp[-2] 等价于 *(cpp - 2) ,cpp - 2后指向的是cp数组第一个元素的地址,*(cpp - 2) 解引用后找到的是 cp数组的第一个元素,也就是c + 3,*cpp[-2] 解引用后找到的是 c数组中的第四个元素,也就是 "FIRST" 中 'F' 字符的首地址,最后再+3,也就是从 'F' 字符向后跳过 3个字符,打印的就是 "ST"

所以 *cpp[-2] + 3 以%s的形式打印的结果是 "ST"

解析:cpp[-1][-1] + 1 

cpp[-1][-1] 等价于 *(*(cpp - 1) - 1) ,此时的cpp指向的是cp数组中第三个元素的首地址,cpp - 1后指向的是 cp数组中第二个元素的首地址,*(cpp - 1) 解引用后找到的是cp数组中的第二个元素,也就是c + 2 ,*(c + 2 - 1) 得到的是c数组中第二个元素,也就是 "NEW" 字符串,最后再加1,也就是从 'N' 字符向后跳过一个字符,指向的就是 "EW"

所以 cpp[-1][-1] + 1 以%s的形式打印的结果是 "EW"

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

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

相关文章

Vue项目如何打包失败(图解)

目录 案例分析 打包失败 package.json 修正文件 打包测试 打包成功 案例分析 打包失败 package.json {"name": "diaryui","version": "0.0.0","private": true,"type": "module","scripts&…

树组件 el-tree 数据回显

树组件 el-tree 数据回显 树型结构的数据回显问题&#xff1a; 这里我只放了核心代码&#xff0c;主要是如何获取选中的树节点的id集合和如何根据树节点的id集合回显数据 大家根据需要自行更改&#xff01; <el-tree ref"authorityRef" node-key"id" …

springboot“智慧识堂”微信小程序-计算机毕业设计源码26647

摘 要 基于微信的“智慧识堂”是利用微信中的小程序功能来实现&#xff0c;自2011年微信诞生以来&#xff0c;微信的使用越来越普遍&#xff0c;尤其最近几年微信旗下的微信小程序因其不占内存&#xff0c;用完即走的特点吸引越来越多用户&#xff0c;使用微信小程序设计的系统…

5分钟完成视频会议私有化部署

在当今快速发展的商业环境中&#xff0c;企业迫切需要一种既高效又安全的视频会议系统以提升工作效率并确保敏感信息的安全。私有化部署会议服务器作为一种高效的数据交换与协作解决方案&#xff0c;正逐渐成为众多企业的首选。然而&#xff0c;对于那些对数据安全性和隐私保护…

基于python的百度迁徙迁入、迁出数据分析(五)

终于在第五篇文章我们进入了这个系列的正题&#xff1a;数据分析 这里我选择上海2024年5月1日——5月5日的迁入、迁出数据作为分析的基础&#xff0c;首先选择节假日的数据作为分析的原因呢&#xff0c;主要是节假日人们出行目的比较单一&#xff08;出游、探亲&#xff09;&a…

RepoAgent:基于大型语言模型的开源框架,主动生成、维护和更新代码文档

人工智能咨询培训老师叶梓 转载标明出处 开发者通常花费约58%的时间在程序理解上&#xff0c;高质量的代码文档在减少这一时间上扮演着重要角色。然而&#xff0c;维护代码文档同样消耗大量的时间、金钱和人力。为了减轻维护代码文档的负担&#xff0c;早期尝试自动文档生成的方…

【学术会议征稿】2024年环境保护与污染控制国际学术会议 (EPPC 2024)

2024年环境保护与污染控制国际学术会议 &#xff08;EPPC 2024&#xff09; 2024 International Conference on Environmental Protection and Pollution Control (EPPC 2024) 2024年环境保护与污染控制国际学术会议将于2024年11月22-24日于中国西安举行。随着全球环境问题日…

【C语言】C语言期末突击/考研--数据的输入输出

目录 一、printf()输出函数介绍 二、scanf读取标准输入 &#xff08;一&#xff09;scanf函数的原理 &#xff08;二&#xff09;多种数据类型混合输入 三、练习题 今天我们学习printf和scanf读取标准输入。下面我们开始正式的学习吧。 C语言中有很多内置函数&#xff0c;今…

【项目管理进阶】如何制定进度计划

前言 项目管理进阶系列又又又又更新了… 作为Team leader或者Project Manager&#xff0c;你们最怕什么&#xff1f;&#xff08;文末有投票&#xff0c;踊跃参加O&#xff09;~ 甲说&#xff0c;我具备多年的项目管理经验&#xff0c;秉持“兵来将挡&#xff0c;水来土掩”的…

开机WiFi没了只能宽带,连声音都有问题,服务里系统还原等一堆错误无法调试!——DHCP服务器常见的故障影响这么大?

错误呈现&#xff1a; 因为问题解决了所以就剩最开始开机直观看到的问题截图&#xff1a; 最崩溃的网络出现问题&#xff1a; 针对网络问题解决结果失败&#xff1a; 问题描述 1&#xff0c;刚开始声音有问题自以为是驱动连接或者声卡硬件有错。 2&#xff0c;后面发现输入…

DB-GPT_0.5.10安装__部署Qwen2-72b模型(Ubuntu)——报错记录

官网地址在这里——源码部署 (yuque.com)&#xff0c;英文地址——Source Code Deployment | DB-GPT (dbgpt.site) 官网给了三种部署方式&#xff1a;源码部署、Docker部署、Docker-Compose部署&#xff0c;这里我选择的部署方式是源码部署&#xff0c;Docker部署的教程我感觉…

18. Lammps命令学习-4之units

来源&#xff1a; “码农不会写诗”公众号 链接&#xff1a;Lammps命令学习-4之units units style 使用read data或create box命令定义模拟框之前设置用于模拟的单位类型   https://docs.lammps.org/units.html Syntax units styleDescription **设置用于模拟的单位类型&am…

MySQL数据库入门基础知识 【1】推荐

数据库就是储存和管理数据的仓库&#xff0c;对数据进行增删改查操作&#xff0c;其本质是一个软件。 首先数据有两种&#xff0c;一种是关系型数据库&#xff0c;另一种是非关系型数据库。 关系型数据库是以表的形式来存储数据&#xff0c;表和表之间可以有很多复杂的关系&a…

flink 1.17 测试

1、配置 2、测试&#xff1a; ./bin/flink run-application -t yarn-application -Dyarn.application.namewordcount -c org.apache.flink.streaming.examples.wordcount.WordCount ./examples/streaming/WordCount.jar --input hdfs://jy/tmp/input --output hdfs://jy/tmp/o…

linux安装人大金仓数据库

下载人大金仓数据库 人大金仓-成为世界卓越的数据库产品与服务提供商 (kingbase.com.cn) 下载授权文件 1创建用户 创建用户并设置密码为kingbase useradd kingbasepasswd kingbase 创建目录 sudo mkdir -p /opt/Kingbase/ES/V9 # 设置操作权限 sudo chmod orwx /opt/Kingba…

Spring@Autowired注解

Autowired顾名思义&#xff0c;就是自动装配&#xff0c;其作用是为了消除代码Java代码里面的getter/setter与bean属性中的property。当然&#xff0c;getter看个人需求&#xff0c;如果私有属性需要对外提供的话&#xff0c;应当予以保留。 因此&#xff0c;引入Autowired注解…

智慧水务项目(一)django(drf)+angular 18 通过pycharm建立项目

一、环境准备 windows 10 pycharm python3.11 二、pycharm 创建django项目 三、建立requirements.txt 在根目录创建requirements.txt,也就是与manage.py同一目录下&#xff0c;先放下面几个依赖 Django djangorestframeworkpip install -r .\requirements.txt 更新下pip python…

仓颉语言 -- 网络编程

使用新版本 &#xff08;2024-07-19 16:10发布的&#xff09; 1、网络编程概述 网络通信是两个设备通过计算机网络进行数据交换的过程。通过编写软件达成网络通信的行为即为网络编程。 仓颉为开发者提供了基础的网络编程功能&#xff0c;在仓颉标准库中&#xff0c;用户可使用…

python3GUI--new音乐播放器!By:PyQt5(附下载地址)

文章目录 一&#xff0e;前言二&#xff0e;展示1.启动2.MV推荐3.专辑详情页4.歌手详情页5.搜索结果页6.歌曲播放页7.我喜欢歌曲页8.我喜欢专辑页 三&#xff0e;思路&启发1.布局2.细节3.组件复用4.项目结构5.优化速度1.Nuitka1.显著提高性能&#xff1a;2.减小程序体积&am…

SPSSAU | 德尔菲专家法原理及案例实操分析

德尔菲专家法Delphi是一种结构化的预测和决策方法&#xff0c;主要用于收集和综合专家意见&#xff0c;进而做出相应决策的研究方法。比如在我们建立指标体系时&#xff0c;首先选择20个备选指标&#xff0c;然后寻找10位专家进行评价&#xff08;评价该20个指标是否具有可行&a…