指针初阶(数组指针与二维数组)

news2024/11/16 20:34:40

0.二维数组特性

        ①.存储格式

        二维数组,在存储空间内的存储顺序是连续存储,按行优先存。

        假设定义一个2X3的数组,其在存储空间的存储格式如下:

        ②.表示方法

        且二维数组还有一个特性,例如有二维数组 a[3][2] ,那么 a[0] 就代表第一行 a[0][0] 的地址,a[1] 就代表第二行 a[1][0] 的地址。

        既然知道了每行数组的首地址是 a[0] 、a[1] 、a[2],那么表示每一行的后面几个元素就再加一个偏移量。a[0] 表示第一行首个元素的地址,那么在首个地址上加一个偏移量 a[0][1] ,就代表了那一行的后面的元素。

        注:a[0] 、 a[1] 、a[2] 表示该行元素的首地址,是一个一级指针

        ③.数组名的含义

        前面说到了,若定义了一个二维数组 int a[3][2] ; 其中 a[0] (即(a + 0))代表第一行的首地址,a[1] (即(a + 1))代表第二行的首地址,a[2]((a + 2)) 代表第三行的首地址;

        可见,对于二维数组来说,a 代表的是该数组的首地址(又称:行指针)其步长为 一行 !

一.用一阶指针表示二维数组

        若定义一个一阶指针,指向数组 a[3][2] ,则该一阶指针是这么表示二维数组的:

其指针 p 的步长为 4个字节 :(int)类型的大小。

        可见,一阶指针和二阶指针的步长是不一样的

三.行指针(数组指针)

1.行指针定义

        定义一个指针,使其指向一个二维数组。

        int (*p)[3] ,其中的 [3] 表示该指针的步长为 3 个 int (一行),则 p 的类型为 int (*)[3]

/* 二维数组 */
int a[2][3];

/* 行指针、其中 [3] 代表该指针的步长为(三个int) */
int (*p)[3];    

/* 使 p 指向数组 a */
p = a;

2.使用行指针表示数组元素

①.行指针偏移量 - a[][]

a[1] 表示第二行 ,在加一个偏移量 [1] 表示第二行的第二个数据。

    int a[3][2] = {{1,6},{9,12},{61,12}};
    int (*p)[2];

    p = a;

    printf("a[1][1]:%d\n",a[1][1]);
    printf("a[1][1]:%d\n",p[1][1]);

②.行指针降阶 - *(*(a + 1) + 1)

        (1)首先 (a + 1) 表示该二维数组的第二行,在 a 这个二阶指针上 + 1 ,步长为(一行)

        (2)*(a + 1) 表示将该地址降阶为了一阶指针(二阶指针解引用,变为一阶指针)

        (3)*(a + 1) + 1 表示该一阶指针移动一个步长(int),对应了 a[1][1] 的地址

        (4)*(*(a + 1) + 1) 最后将该元素的地址进行解引用,得到数据

    int a[3][2] = {{1,6},{9,12},{61,12}};
    int (*p)[2];

    p = a;

    printf("a[1][1]:%d\n",*(*(a + 1) + 1));
    printf("a[1][1]:%d\n",*(*(p + 1) + 1));

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

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

相关文章

关于SSL认证后出现的http和https无法同时访问问题

--痛苦是人最好的试金石 Pain is mans best litmus test 问题: 我现在在我的Tomcat上面加了一个SSL 认证,但是我就是指认证了一个xxx.xxx.com的域名,我其他的域名 也在同一个server.xml配置文件中,现在xxx.xx.com可以https可以使用…

策略模式+模版方法模式+简单工厂模式混用优化代码复杂分支问题

说明 这篇博客是在复杂场景使用策略和工厂模式代替分支语句升级版,增加了模版方法模式。将支付类的公共逻辑抽取到模板类中,使整个支付逻辑更加灵活,进一步优化了代码结构,提升了软件的可维护性和可读性。 流程图如下 先看一遍流…

接口自动化面试题放送,助你离Offer又近一步

Hi,大家好,网传金九银十,其实只要技术过硬,准备充分,任何时候都是找工作的黄金时期。时值五月,今天继续分享一波接口自动化面试题,为你的面试助攻,欢迎在留言区评论喔。 请问你是如…

大数据-109 Flink 体系结构 运行架构 ResourceManager JobManager 组件关系与原理剖析

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

全新一代理想智能驾驶开启万人体验团招募,OTA 6.2正式全量推送

核心信息: 无图NOA正式推送后,截至7月30日,理想汽车城市NOA日均里程提升3倍,城市NOA日均活跃度提升8倍理想全国门店开启无图NOA试驾后,门店NOA试驾率实现倍增,30万元以上车型AD Max销量占比达到70%理想端到…

NoSQL:数据库领域的“新潮力量”——从起源到未来的全面解析

引言 曾几何时,关系型数据库(RDBMS)就是数据管理的“老大哥”,一统江湖,所向披靡。然而,随着大数据时代的到来,数据量像火箭般飙升,数据的形态也变得越来越“随性”,传统…

一文盘点:性能测试常见的7大指标(文末送性能测试题库)

01性能指标分类 系统性能指标 资源性能指标 中间件指标 数据库指标 稳定性指标 可扩展性指标 可靠性指标 1、系统性能指标 响应时间 系统处理能力 吞吐量 并发用户数 错误率 2、资源性能指标 CPU 內存 磁盘吞吐量 网络吞吐量 3、中间件指标 常用的中间件例如…

webstorm最新激活码

最智能的 JavaScript IDE WebStorm 是一个适用于 JavaScript 和相关技术的集成开发环境。类似于其他 JetBrains IDE,它也会使您的开发体验更有趣,自动执行常规工作并帮助您轻松处理复杂任务。 激活码获取地址 https://web.52shizhan.cn/activity/webs…

微信小程序用web-view实现内嵌h5页面

需求: 在微信小程序里面使用web-view内嵌一个h5页面,并且从h5页面还可以跳到小程序的某个页面 目录 需求: 小程序web-view内嵌h5页面 配置: code: 在h5页面跳转到小程序的某个页面 嵌入sdk: code&…

servlet的过滤器filter和springmvc的拦截器Interceptor

背景 Servlet的过滤器(Filter)和Spring MVC的拦截器(Interceptor)都是用于在请求处理过程中对请求进行拦截和处理的组件。它们之间的主要区别在于它们的作用范围和使用方式。 作用范围 Filter:过滤器是基于Servlet规范…

性价比运动耳机排行榜有哪些上榜?排行榜五大人气机型分享!

开放式蓝牙耳机最近异常火热,不是因为开放式耳机技术含量有多高,而是它从另一个层面,给了很多追求佩戴舒适,又讲究卫生、安全的玩家一种完美的方案。相对于入耳式耳机它又有独特的视听魅力。相比传统入耳式耳机,开放式…

运动耳机哪个牌子的质量好?五款口碑绝佳机型安利!

​现在耳机市场上,开放式耳机因为外观时尚、戴着舒服,成了大家日常爱用的热门货。但是,市面上的开放式耳机品牌多得眼花缭乱,质量也是高低不一,让人挑花了眼。作为一个搞了三年耳机评测的博主,我还是个耳机…

五、工程化开发和脚手架Vue CLI

开发 Vue 的两种方式: 1.核心包传统开发模式:基于 html/css/js 文件,直接引入核心包,开发 Vue. 2.工程化开发模式:基于构建工具(例如:webpack)的环境中开发 Vue。 一、基本介绍: Vue CLl 是 Vue 官方提供的一个可以帮助我们快速创建一个开发…

ISO 26262中的失效率计算:SN 29500-7 Expected values for relays

目录 引言 1 基准条件下的失效率 2 失效率转换 2.1 失效率预测模型 2.2 负载应力系数 2.2.1 应力区域 2.2.2 负载应力系数选择 2.3 环境应力系数 2.4 温度应力系数 2.4.1 温度应力系数计算模型 2.3.2 温度应力系数计算 2.4 失效准则系数 3 任务剖面应力系数 引言 …

使用 nuxi build 命令构建你的 Nuxt 应用程序

title: 使用 nuxi build 命令构建你的 Nuxt 应用程序 date: 2024/8/30 updated: 2024/8/30 author: cmdragon excerpt: nuxi build 命令是构建 Nuxt 应用程序的核心工具,它将你的应用程序打包成适合生产环境的格式。通过理解和使用不同的选项,如 --prerender、–dotenv 和…

【微信小程序】分包--基础概念

基础概念 1. 什么是分包 分包指的是把一个完整的小程序项目,按照需求划分为不同的子包,在构建时打包成不同的分包,用户在使用时按需进行加载。 2. 分包的好处 3. 分包前项目的构成 4. 分包后项目的构成 5. 分包的加载规则 6. 分包的体积限…

#单片机基础 笔记二

SPI中断 1.SPI总线协议 1.1协议介绍 SPI接口是Motorola (motorola | Smartphones, Accessories & Smart Home Devices)首先提出的全双工三线/四线同步串行外围接口采用主从模式(Master Slave)架构。 时钟由Master控制&#xf…

Fast-BEV: A Fast and Strong Bird’s-Eye ViewPerception Baseline

本文提出了一种简单但有效的框架,称为Fast-BEV,它能够在车载芯片上进行更快的BEV感知。 Fast-BEV框架包括五个部分: (1) 一个轻量级且易于部署的视图变换方法,能够快速将2D图像特征转化为3D体素空间; (2) 一个多尺度图像编码器…

DAY8:DNS查询过程 | CDN的概念和功能 | Cookie和Session是什么?有什么区别?

目录 DNS查询过程 CDN的概念和功能 Cookie和Session是什么?有什么区别? Cookie和Session的概念 Cookie和Session的区别 DNS查询过程 DNS用来将主机名和域名转换为IP地址,其查询过程一般通过以下步骤: 本地DNS缓存检查&…

岩石检测检测系统源码分享 # [一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]

岩石检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …