当前位置: 首页 > news >正文

E32.【C语言】练习:指针运算习题集(下)(未完)

Exercise 6:阿里巴巴面试题

求下列代码的执行结果

#include <stdio.h>
int main()
{char *a[] = {"work","at","alibaba"};char**pa = a;pa++;printf("%s\n", *pa);return 0;
}

答案速查:

分析:
  char *a[] = {"work","at","alibaba"};这条代码不是把三个字符串放入a中,而是a指针数组中存放着的地址指向字符串的work首字母w的第一个字节,at首字母a的第一个字节alibaba首字母a的第一个字节

VS2022打开内存输入&a

发现存放的地址0x009a7bcc,0x009a7bd4,0x009a7bd8是连续的,对应三个字符串的首字母的地址

转到地址0x009a7bcc

每一个字符串的结尾都跟着\0

pa的类型是char**,是二级指针(潜台词:二级指针指向一级指针),即pa指向a这个一级指针,一级指针指向字符串的首字母

pa++,二级指针指向a这个指针数组的第二个元素,第二个元素(一级指针)指向第二个字符串的首字母

结果输出at

★(HARD)Exercise 7

求下列代码的执行结果(printf中有表达式过于复杂,→点击查看优先级←)

#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);return 0;
}

答案速查:

分析:

y由前三行可画:

优先级:++和-- > *(解引用) > +

注意:一次解引用是从指针指向的位置到另一个位置

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

由于优先级:++> *(解引用) ,因此cpp先减1再两次解引用(此时cpp的值已经变动!会影响到下一个printf打印的内容)

结果是POINT

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

重点在分析运算顺序!!!

从cpp开始,cpp左侧为++,右侧为+,显然++优先运算,*紧邻++,因此发生一次解引用

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

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 统计学习与方法实战——K近邻算法
  • 编译u-boot报错configuration written to .config
  • 快速了解Docker容器技术
  • 米家商城主题 html 页面源码分享,可用于网页设计作业
  • IDEA快捷键总结大全
  • 建筑安全寿命你知道多少?老旧危房如何逃脱‘倒塌’宿命?
  • 在C#中使用Redis
  • 虚幻5|知识点(1)寻找查看旋转,击打敌人后朝向主角
  • MySQL笔记(大斌)
  • Python世界:文件自动化备份实践
  • 聚类算法-Kmeans聚类
  • 基础闯关4
  • CentOS7虚拟机下安装及使用Docker
  • qt5.15.2在线安装选项不见了?怎么办?
  • 【Pythonj进阶】Python中的日志记录与监控:跟踪和分析应用程序行为
  • 深入了解以太坊
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • Gradle 5.0 正式版发布
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • vue 配置sass、scss全局变量
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 京东美团研发面经
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 原生 js 实现移动端 Touch 滑动反弹
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • ​油烟净化器电源安全,保障健康餐饮生活
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (1)Android开发优化---------UI优化
  • (2024,LoRA,全量微调,低秩,强正则化,缓解遗忘,多样性)LoRA 学习更少,遗忘更少
  • (C++)八皇后问题
  • (SpringBoot)第二章:Spring创建和使用
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (译)2019年前端性能优化清单 — 下篇
  • (转)socket Aio demo
  • (转)程序员疫苗:代码注入
  • (转)负载均衡,回话保持,cookie
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .net实现客户区延伸至至非客户区
  • .sdf和.msp文件读取
  • /boot 内存空间不够
  • ::
  • @开发者,一文搞懂什么是 C# 计时器!
  • [@Controller]4 详解@ModelAttribute
  • [1]从概念到实践:电商智能助手在AI Agent技术驱动下的落地实战案例深度剖析(AI Agent技术打造个性化、智能化的用户助手)
  • [AIGC] Redis基础命令集详细介绍
  • [Android]RecyclerView添加HeaderView出现宽度问题
  • [C#]使用DlibDotNet人脸检测人脸68特征点识别人脸5特征点识别人脸对齐人脸比对FaceMesh
  • [C++]入门基础(1)
  • [CareerCup][Google Interview] 实现一个具有get_min的Queue