数组和指针练习(1)

news2024/10/3 10:39:57

题目:

int main()

{
     int a[5] = { 1,2,3,4,5};
     int * ptr = (int * )(&a + 1);

     printf("%d,%d",*(a + 1),*(ptr - 1));
     return 0;

}

思路分析:
 

   int * ptr = (int * )(&a + 1);

  • &a ——表示的是整个数组的地址,而在内存存储中,整个数组的地址其实是在首元素地址的前一个空间位置,所以&a所展示的位置如上图所示。
  • &a+1——在很多的数据类型中,+1表示的是加多少字节,字节数取决于类型数,而&a+1中的&a表示的是数组的地址,那么这就表示了加一个&a一样大小的字节数,然后抵达的地址。
  • 而这个地址也如图整个数组地址一样,处在下一个数组之前的空间位置,或者处在这个数组空间之后的一个空间位置。
  • (int*)——&a+1表示的是数组的地址,而(int*)是进行强制类型转化,转化为int类型的指针地址

*(ptr - 1)

  • 如图,结合上一步的分析, &a+1被强制类型转化为了int*类型的并赋予了同样类型的ptr
  • ptr的内部存放的是&a+1的地址,但是整个地址被转化为了int*类型
  • 进行ptr-1后,这个-1的操作从数组数据类型变为了int类型的,因此-1减去的是四个字节,在int类型的数组中,四个字节表示一个元素,因此ptr-1便是如图中所示,移动到了数组的最后一个元素。
  • 所以*(ptr-1)得到的结果是数组的最后一个元素

 

 *(a + 1)

  • a——数组名,因为并不是在sizeof中,所以该处的a表示的是首元素的地址
  • a+1——在很多的数据类型中,+1表示的是加字节数,而加上的字节数取决于数据的类型,眼下的a表示的是首元素的地址,而首元素表示的是int类型,也因此+1表示的是加四个字节,也就从首元素地址变成了第二个元素的地址
  • *(a+1)——表示的就是第二个元素地址指向的元素,也就是第二个元素

 

 结论:

  1. &a+1 —— &a 表示的是数组的地址,+1加的是这个数组的总字节数大小后,抵达的位置。
  2. a+1 ——a表示的是首元素的地址,+1加的是同这个元素一样的字节数大小后,抵达的位置。
  3. 加上的字节大小,看数组的数据类型或者元素的数据类型。

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

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

相关文章

BFT最前线|字节跳动AI对话产品“豆包”上线!联想集团推出AI大模型训练服务器!雷尼绍推出工业自动化产品系列

原创 | 文 BFT机器人 AI视界 TECHNOLOGY NEWS 看点1 天才少年稚晖君首秀,官宣智元人形机器人! 2023年8月18日上午,从华为离职的“天才少年”彭志辉,也是B站硬核科技UP主稚晖君,公布了他所在的智元团队创业半年的成果…

【严重】Smartbi windowUnloading 限制绕过导致远程代码执行 (MPS-e2z8-wdi6)

zhi.oscs1024.com​​​​​ 漏洞类型授权机制不恰当发现时间2023-08-22漏洞等级严重MPS编号MPS-e2z8-wdi6CVE编号-漏洞影响广度广 漏洞危害 OSCS 描述 Smartbi 是思迈特软件旗下的一款商业智能应用,提供了数据集成、分析、可视化等功能,帮助用户理解和…

湘潭大学 湘大 XTU OJ 1116 水仙花数 题解(非常详细)

链接 1116 题面 Description 如果一个n位数的每个数位的n次方和就是本身,那么我们称这种数为“水仙花数”。比如371,337313273431 371。现给你一个数,请求这个数是否是水仙花数。 输入 有多组样例。每个样例占一行,为一个整数a&#xff0…

72 # http 缓存策略

前面实现了一个 http-server,并且实现了 gzip 的压缩,下面通过前面几节学习的缓存知识来添加一下缓存。 大致就是先强制缓存 10s,然后采用协商(对比)缓存,大致图如下 在之前的 http-server 的代码基础上添…

2023年8月22日OpenAI推出了革命性更新:ChatGPT-3.5 Turbo微调和API更新,为您的业务量身打造AI模型

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

C++day3(设计一个Per类,类中包含私有成员:姓名、年龄...)

1.设计一个Per类&#xff0c;类中包含私有成员&#xff1a;姓名、年龄、指针成员身高、体重&#xff0c;再设计一个Stu类&#xff0c;类中包含私有成员&#xff1a;成绩、Per类对象 p1&#xff0c;设计这两个类的构造函数、析构函数和拷贝构造函数。 #include <iostream&g…

【图论】拓扑排序

一.定义 拓扑排序是一种对有向无环图&#xff08;DAG&#xff09;进行排序的算法&#xff0c;使得图中的每个顶点在排序中都位于其依赖的顶点之后。它通常用于表示一些任务之间的依赖关系&#xff0c;例如在一个项目中&#xff0c;某些任务必须在其他任务之前完成。 拓扑排序的…

解决:错误: 找不到或无法加载主类 XXX

解决&#xff1a;错误: 找不到或无法加载主类 XXX 一问题描述&#xff1a;1.在MacBook电脑上面&#xff0c;想用java原生命令执行一个class文件2.进入到class文件目录下面&#xff0c;使用“java 类名”命令&#xff0c;总是报错如下图所示。因为在windows环境的cmd环境这样都可…

游戏出海需知:Admob游戏广告变现策略

越来越多的出海游戏公司更加重视应用内的广告变现&#xff0c;而 AdMob因为其提供的丰富的广告资源&#xff0c;稳定平台支持&#xff0c;被广泛接入采用。 Admob推出的广告变现策略包括bidding、插页式激励视频、开屏广告、各种细分功能的报告等等。 一、Bidding 竞价策略 …

文件夹的批量下载

1.业务背景 公司想实现文件系统下载&#xff0c;上次图简单就草率的写了文件下载&#xff0c;这不趁着同事请假赶集吧这坑给填上。 2.遇到问题 刚准备开始写&#xff0c;就头疼&#xff0c;文件只要获得数据输出流就行&#xff0c;但是这文件夹需要维护层级关系。 前端…

Postman高级用法——newman安装运行

newman是为postman而生专门的执行软件&#xff0c;newman执行脚本即非GUI方式执行&#xff08;命令行方式&#xff09; 下面为newman安装运行的详细操作&#xff01;&#xff01;&#xff01;&#xff08;认真看噢&#xff09; &#xff08;1&#xff09;安装node.js&#xf…

多个promise并发执行,如果某个promise失败,则尝试重新执行该promise一次,如果还是失败则提示错误

思路 可以使用 Promise.all()和Promise.catch() 结合的方式来实现多个promise的并发执行&#xff0c;并在某个promise失败时尝试重新执行。 首先&#xff0c;将所有的promise放入数组中&#xff0c;并使用Promise.all()来同时执行这些promise&#xff0c;这样可以确保所有的p…

利用 XGBoost 进行时间序列预测

推荐&#xff1a;使用 NSDT场景编辑器 助你快速搭建3D应用场景 XGBoost 应用程序的常见情况是分类预测&#xff08;如欺诈检测&#xff09;或回归预测&#xff08;如房价预测&#xff09;。但是&#xff0c;也可以扩展 XGBoost 算法以预测时间序列数据。它是如何工作的&#xf…

【业务功能篇73】web系统架构演变-单体-集群-垂直化-服务化-微服务化

1.服务架构的演 1.1 单体架构 单体架构应该是我们最先接触到的架构实现了&#xff0c;在单体架构中使用经典的三层模型&#xff0c;即表现层&#xff0c;业务逻辑层和数据访问层。 单体架构只适合在应用初期&#xff0c;且访问量比较下的情况下使用&#xff0c;优点是性价比很…

Redis五种类型

Redis 基础类型 String 应用场景 缓存功能&#xff1a;string 最常用的就是缓存功能&#xff0c;会将一些更新不频繁但是查询频繁的数据缓存起来&#xff0c;以此来减轻 DB 的压力。 底层实现 如果字符串对象保存的是一个字符串值&#xff0c; 并且这个字符串值的长度大于…

【2023中国算力大会】高质量建设西部数谷,努力把宁夏打造成算力之都

2023年8月18日—19日&#xff0c;2023中国算力大会在宁夏银川举行&#xff0c;本届大会以“算领新产业潮流 力赋高质量发展”为主题&#xff0c;打造“主题论坛、成果展示、产业推介、先锋引领”四大核心内容&#xff0c;全面展示算力产业发展最新成果&#xff0c;为产业各方搭…

servlet介绍,tomcat容器下载启动

1.1servlet是什么&#xff1f; servlet是一种java程序类&#xff0c;这些类继承了httpservlet类。这些类没有main方法&#xff0c;有两大对象request请求&#xff0c; response响应对象。这些类需要servlet容器才可以运行。 servlet 2.5 servlet 3.0 WEB-INF/web.xml <…

Docker安装并配置Pushgateway

Linux下安装Docker请参考&#xff1a;Linux安装Docker 简介 Pushgateway是Prometheus的一个组件&#xff0c;prometheus server默认是通过Exporter主动获取数据&#xff08;默认采取pull拉取数据&#xff09;&#xff0c;Pushgateway则是通过exporter主动方式推送数据到Pushg…

BlazorServer中C#与JavaScript的相互调用

BlazorServer中C#与JavaScript的相互调用 前言&#xff1a; ​ 虽然BlazorServer中推荐使用C#在razor页面中的替代JavaScript来完成逻辑的编写&#xff0c;但当需要使用第三方的javascript文件/组件里的内容时&#xff0c;则难免要在C#中调用其方法或对象。反之当你的(用到第…

性能调优篇 二、Jvm监控及诊断工具-命令行篇

目录 一、概述1、简单命令行工具 二、jps&#xff1a;查看正在运行的Java程序&#xff08;掌握&#xff09;1、是什么&#xff1f;2、测试3、基本语法 三、jstat&#xff1a;查看jvm统计信息&#xff08;掌握&#xff09;1、是什么&#xff1f;2、基本语法3、补充 四、jinfo&am…