二维数组 和 变长数组

在上一期的内容中,为诸君讲解到了一维数组,在一维数组的基础上,C语言中还有着多维数组,其中,比较典型且运用较为广泛的就是我们今天的主角——二维数组

一 . 二维数组的概念

我们把单个或者多个元素组成的数组定义为一维数组。由此推演,我们可得:一维数组作为数组的元素,这就是我们的二维数组;把二维数组作为数组的元素,这就是我们的三维数组......

二维数组以上的数组我们就将其称为多维数组

二 . 二维数组的创建

二维数组相较于一维数组,在表达形式上其实没有太大的变化,多了一个括号而已嘛,其实质也就是多了一个纵列,话不多说,咱们直接上图理解:

三 . 二维数组的初始化

初始化这个概念,跟诸君都是老朋友了昂,我们每当介绍到一个变量的时候,都会讲到其初始化,所以,二维数组也不例外,二维数组的初始化格式跟一维数组相差无几,只是略有差异而已

(1)二维数组的完全初始化

关于二维数组可以省略“ 行 ”但不能省略“ 列 ”:诸君都是聪明人,大家在脑袋里面推演一下就能相同了,当我们拿到一串数字,虽然我们不知道它有几行,但我们知道了“ 列 ”数,我们自然是可以大致的将二维数组的表格罗列出来;但我们只知道“ 行 ”,不知道“ 列 ”却办不到

这种完全初始化的二维数组在其内部的表现形式为:

(2)二维数组的不完全初始化

这两个二维数组在其内部的表现形式为:

(3)按照“ 行 ”初始化

 这种按照“ 行 ”初始化的二维数组在其内部的表现形式为:

四 . 二维数组的下标

二维数组跟一维数组的下标格式一样,如上图所示,仅仅只是多了个纵列而已,由上至下从0开始的递增变化,大家可以简单地将其理解为我们数学当中的坐标,只是这个特殊的坐标是从左上角开始,数值是由0开始

如上图,当我们想要找到三行二列的存放的数时,我们只需要输出 arr [2] [1] 即可,当然,由于这是一个整形数组,我们存放的也是整数,所以我们依旧用“ %d ”打印,如:

五 . 二维数组的输入与输出

这几个字看似陌生,其实都是天天打交道的老朋友啦,你不信?那我就来为诸君逐字分析:

提到输入,诸君是不是应该第一时间想到 scanf 函数

提到输出,诸君是不是应该第一时间想到 printf 函数

这就只剩下了我们的二维数组了,且我们的二维数组是不是有多个元素?这就需要我们去“ 遍历 ”的输入与输出,遍历这个词儿大家能get到吧?大家可以理解为通过循环的方式一个一个去接触,所以我们会选择用 for 循环去遍历输入与输出每个元素

这样子看来,二维数组的输入与输出是不是诸君最熟悉的陌生人呢?

那么话不多说,咱们就直接上图了昂:

六 . 二维数组在内存中的储存

大声的告诉我,我们想要探究一个东西在计算机的内存中的储存方式,我们该怎么做?

打印地址嘛,地址一打印出来,一瞧,这不比看干巴巴的文字有用,上图!

(1)这是x64环境下,也就是64位

(2)这是x86环境下,也就是32位

之前提到过,计算机中地址都是以十六进制数储存的

所以由此观之:不管是在x64还是在x86环境下,只要是整型,每个地址之间都相差4个字节。且我们也可以得出,二维数组中的每个元素也是连续存放

七 . 变长数组

在C99标准之前,C语言在创建数组的时候,数组大小的指定只能使用常量、常量表达式。这样的语法限制呢,就让人在写代码的时候很不方便,使得我们创建数组不够灵活,数组大了浪费空间,数组小了又会越界,造成bug,很不爽对吧

当然了,这些小问题,诸君不必多虑昂,有限制就必定有突破嘛,在C99当中就改革创新了,给了我们一个变长数组(variable-length array,简称 VLA)的新特性,这就使得我们可以运用变量来创建数组,如下图所示的形式:

变长数组的长度取决于变量 “ n ”的值,编译器没办法事先预知,只有当我们的程序在运行时,才能知道这个“ n ”是多少,我们才能确定数组长度。因此,变长数组是不能初始化的。这个点应该很好理解昂,大家想一想嘛,初始化不就是为了给数组提供元素数据嘛,你这一输入,数组里的长度不就定死了嘛,那还咋变长啊是吧

它的好处是:程序员不必在开发时,随意为数组指定一个估计的长度, 程序会在运行时为数组分配
精确的长度
但它有一个比较迷惑的点:变长数组的意思是 数组的大小是可以使用变量来指定的,在程序运行的
时候,根据变量的大小来指定数组的元素个数 ,而不是说数组的大小是可变的。 数组的大小一旦确
定就不能再变化了(天王老子来了不行!)

但是呢,很遗憾昂,在我们使用的VS2022版本上,虽然支持绝大部分的C99语法,但恰巧就没有

这个变长数组。当然,有gcc编译器的小伙伴们可以去试一试,我就不试了,我只有VS2022,大

家了解到这个变长数组的概念就好 

OKK,有关数组的知识点这是这两期的内容了,一维数组、二维数组、变长数组等等。数组的内容还是很重要的,因为它跟我们C语言中的一大拦路虎——指针,也就是我们俗称的“ 地址 ”息息相关,所以还望诸君一定引起重视。鄙人这两天就被指针搞得焦头烂额,唉,难搞哟,革命尚未成功,同志仍需努力!多的不唠了,加油加油,咱们也下期再见,与诸君共勉!!! 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React 第三十一章 前端框架的分类

现代前端框架,有一个非常重要的特点,那就是基于状态的声明式渲染。如果要概括的话,可以使用一个公式: UI f(state) state:当前视图的一个状态f:框架内部的一个运行机制UI&#xff1…

LNMP环境部署WordPress——使用源码包安装方式部署环境

目录 一.前提准备 二.源码安装Mysql 1.MySQL类型 2.MySQL 版本说明 3.MySQL 安装方式 3.1 yum 安装 3.2 编译安装 3.3 二进制安装 3.4 rpm 安装 4. 编译安装MySQL5.7 4.1 清理安装环境 4.2 创建mysql用户 4.3 从官网下载tar包 4.4 安装编译工具 4.5 解压 4.6 …

专业130+总分400+哈尔滨工程大学810信号与系统考研哈工程水声电子信息通信工程,真题,大纲,参考书。

毕业设计刚搞完,总结一下去年考研的复习经历,希望对大家复习有帮助,考研专业课810信号与系统130总分400,如愿上岸哈工程水声。专业课:130 哈工程水声院810专业课信号与系统难度适中,目前数一难度很高&…

【全开源】Java洗衣清洁服务同城清洗服务小程序源码

特色功能: 在线预约与支付:用户可以直接通过小程序预约洗衣时间和地点,同时还可以在线支付洗衣费用,从而避免了排队等待的时间,提高了效率。订单查询与服务评价:用户可以通过小程序实时查询洗衣订单的状态…

算法详解——回溯法

一、回溯法概述——问题背景 回溯法是一种解决约束满足问题的方法,特别适用于解决组合问题、搜索优化问题等。它通过逐步构建候选解决方案并且在这个解决方案不再可能满足约束或条件时进行剪枝和回溯。具体来说,回溯法可以应用于以下类型的问题&#xff…

物联网到底物联了个啥?——青创智通

工业物联网解决方案-工业IOT-青创智通 物联网,这个听起来似乎颇具科技感和未来感的词汇,其实早已悄然渗透到我们生活的方方面面。从智能家居到智慧城市,从工业自动化到医疗健康,物联网技术正在以其独特的魅力改变着我们的生活方式…

从头理解transformer,注意力机制(下)

交叉注意力 交叉注意力里面q和KV生成的数据不一样 自注意力机制就是闷头自学 解码器里面的每一层都会拿着编码器结果进行参考,然后比较相互之间的差异。每做一次注意力计算都需要校准一次 编码器和解码器是可以并行进行训练的 训练过程 好久不见输入到编码器&…

自拍欺骗成为流行的身份证件欺诈技术

据 Socure 称,文档图像叠加是 2023 年最流行的身份证件欺诈技术,在所有被拒绝的身份证件中,有 63% 发生这种情况。 自拍欺骗和冒充在与文件相关的身份欺诈中占主导地位 当用户拍摄照片或使用 ID 的屏幕截图图像(而不是提供文档的…

Linux-页(page)和页表

本文在页表方面参考了这篇博客,特别鸣谢! 【Linux】页表的深入分析 1. 页帧和页框 页帧(page frame)是内存的最小可分配单元,也开始称作页框,Linux下页帧的大小为4KB。 内核需要将他们用于所有的内存需求&a…

人工智能能否解决科学问题:Wolfram的视角

引言 在当今AI技术飞速发展的背景下,它在科学研究领域的应用正逐渐深入。从AlphaFold 3的推出到日益复杂的计算模型,AI似乎在向科学家的角色靠拢。然而,美国计算机科学家Stephen Wolfram在一系列讲座和文章中提出了反思:AI真的能…

DDD架构理论详解

文章目录 一、概念入门1. 概念简介2. DDD的核心理念3. 范式4. 模型5. 框架6. 方法论7. 软件设计的主要活动 二、DDD核心理论1. Domain领域层都包含什么?2. 聚合、实体和值对象3. 仓储,封装持久化数据4. 适配(端口),调用…

Python-VBA函数之旅-str函数

目录 一、str函数的常见应用场景 二、str函数使用注意事项 三、如何用好str函数? 1、str函数: 1-1、Python: 1-2、VBA: 2、推荐阅读: 个人主页: https://myelsa1024.blog.csdn.net/ 一、str函数的常…