C语言(二维数组)

news/2024/11/15 0:27:17/

                          Hi~!这里是奋斗的小羊,很荣幸各位能阅读我的文章,诚请评论指点,关注+收藏,欢迎欢迎~~     

                        💥个人主页:小羊在奋斗

                        💥所属专栏:C语言   

        本系列文章为个人学习笔记,在这里撰写成文一为巩固知识,二为同样是初学者的学友展示一些我的学习过程及心得。文笔、排版拙劣,望见谅。 

                        一、二维数组

                                        1、二维数组的概念 

                                        2、二维数组的创建  

                                        3、二数组在内存中的存储

                        二、二维数组的初始化  

                                        1、不完全初始化  

                                        2、完全初始化

                        三、二维数组的使用  

                                        3、二维数组的下标   

                                        3、二维数组的输入和输出

                        四、变长数组

一、二维数组

        1、二维数组的概念

        前面学习了一维数组,数组的元素都是内置类型的,如果我们把一维数组作为数组的元素,这时候就是二维数组,二维数组作为数组元素的数组就是三维数组,二维数组以上的数组统称为多维数组。

        一维数组是整型元素的数组;而二维数组是一维数组的数组

        2、二维数组的创建

        我们该如何创建二维数组呢?

        type_arr_name[常量值1] [常量值2];

        例如:

        int arr[3] [4];

        double date[2] [3];

        上面我们定义了一个整型二维数组和实型二维数组,对整型二维数组,3表示3行,4表示4列。与一维数组类似,二维数组创建中的行数和列数也必须为整型常量表达式,不能包含变量。

        3、二维数组在内存中的存储

        

        可以看到,二维数组在内存中的存储与一维数组是极其类似的。二维数组中的每个元素都是连续存放的,也就是说跨行也是连续存放的

        结合上述我们得出的结论,我们就可以把二维数组抽象成像一维数组一样:

        这就对应了我们开始提到的那句话:二维数组是一维数组的数组。

 二、二维数组的初始化

        1、不完全初始化

        不完全初始化时,未赋初值的元素自动取0(对实数是0.0,对字符型是‘\0’)。

        int arr1[3][5] = { 1,2 };

        int arr2[2][4] = { 0 };

        

        2、完全初始化

        int arr3[3][5] = { 1,2,3,4,5,2,3,4,5,6,3,4,5,6,7 };

        int arr4[3][5] = { { 1,2,3,4 }, { 5,6,7 }};

        像上面我们创建的这几个数组,只有一个花括号括起来的叫按元素存储顺序初始化,一个花括号里还有若干花括号的叫按行初始化。按存储顺序对元素全部或部分初始化时,可以根据给定初始化数值的个数,自动确定数组的行数,此时行数可以省略。如:

        int arr5[ ][3] = { 1,2,3,4 };

        int arr6[2][3] = {{1,2,3}, {4,0,0}};

        数组 arr5 和数组 arr6 是等价的。

        注意:任何情况下列数都不能省略!

三、二维数组的使用

        1、二维数组的下标

        其实上面演示的几个二维数组我们已经标明了下标,与一维数组是类似的。以数组 arr4 为例来看,左边竖着的序号是行,上面横着的是列。

        int arr4[3][5] = { { 1,2,3,4 }, { 5,6,7 }};

        通过下标,我们就能确定唯一的元素,比如通过 arr4[0][3] 我们就能找到 “4”,

        2、二维数组的输入和输出

        因为二维数组元素有两个下标,一般通过二重循环来操作使用二维数组元素。

#include <stdio.h>int main()
{int i = 0;int j = 0;int arr[3][5] = { 0 };//输入3*5个数for (i = 0; i < 3; i++){for (j = 0; j < 5; j++){scanf("%d", &arr[i][j]);//注意%d后面不要加空格}}for (i = 0; i < 3; i++){for (j = 0; j < 5; j++){printf("%-2d ", arr[i][j]);//这里用%-2d打印是为了格式好看}printf("\n");//打印完一行后换行}return 0;
}

 

四、变长数组

        在C语言的c99标准之前,数组在创建的时候,数组大小的指定只能使用常量;在c99之后,C语言中引入了变长数组的概念,使得数组的大小可以使用变量来指定。但遗憾的是,VS2022上不支持变长数组

        int n = 0;

        scanf("%d", &n);

        int arr[n];

        上面示例中,我们定义了一个变长数组 arr ,我们可以输入我们想要的 n 值来指定它的大小。因为它的长度取决于变量 n 的值,编译器没法事先确定,只有在运行时才能知道 n 是多少。

        变长数组的基本特性,就是数组长度只有运行时才能确定,所以变长数组不能初始化。它的好处是我们不必在写代码时,随意为数组制定一个估计的长度,程序可以在运行时为数组分配精确的长度。

        值得注意的是,变长数组的意思是说数组的大小是可以使用变量来指定,而不是说数组的大小是可变的。数组的大小一旦确定就不能再变化了。

        

                                 点击跳转主页—> 💥个人主页:小羊在奋斗


http://www.ppmy.cn/news/1429750.html

相关文章

高职人工智能综合实训案例之Al分类模型实战

一、案例背景 随着信息技术的迅猛发展&#xff0c;人工智能已经成为引领新一轮科技革命和产业变革的重要驱动力。特别是在大数据和云计算技术的支持下&#xff0c;AI分类模型在各个领域展现出广阔的应用前景。无论是图像识别、语音识别&#xff0c;还是自然语言处理&#xff0…

通过阿里云向量检索 Milvus 版和通义千问快速构建基于专属知识库的问答系统

背景介绍 阿里云向量检索 Milvus 版是一款 Serverless 全托管服务&#xff0c;确保了与开源 Milvus 的完全兼容性&#xff0c;并支持无缝迁移。它在开源版本的基础上增强了可扩展性&#xff0c;能提供大规模 AI 向量数据的相似性检索服务。凭借其开箱即用的特性、灵活的扩展能力…

决策树分类任务实战(python 代码详解)

目录 一、导入库、数据集、并划分训练集和测试集 二、参数调优 (一)第一种调参方法&#xff1a;for循环 (1)单参数优化 ①单参数优化(无K折交叉验证) ②单参数K折交叉验证 优化 (2)多参数优化 ①多参数优化(无K折交叉验证) 参数介绍&#xff1a; ②多参数K折交叉验证…

Redis 中常见数据类型的基本命令以及其用法

目录 Redis通用命令 String的常见命令有&#xff1a; Hash的常见命令有&#xff1a; List的常见命令有&#xff1a; Set的常见命令有&#xff1a; SortedSet的常见命令有&#xff1a; Redis通用命令 通用指令是部分数据类型的&#xff0c;都可以使用的指令&#xff0c;常…

MAC上如何将某个目录制作成iso格式磁盘文件,iso文件本质是什么?以及挂载到ParallelDesktop中?(hdiutil makehybrid )

背景 ParallelsDesktop没有安装ParallelsTools的无法共享目录&#xff0c;可以通过ParallelsDesktop提供CD磁盘的方式共享进去 命令 # 准备文档 mkdir mytestdir cp xxx mytestdir# 生成iso hdiutil makehybrid -o output.iso mytestdir -iso -joliethdiutil是MAC提供的磁盘…

Eclipse debug时有几个常用的快捷键非常实用

Eclipse debug时&#xff0c;有几个常用的快捷键非常实用。 F5&#xff1a;Step Into&#xff0c;单步执行&#xff0c;遇到子函数就进入并且继续单步执行。简而言之&#xff0c;这个快捷键会让你进入子函数&#xff0c;详细查看所执行的每一步。 F6&#xff1a;Step Over&…

RT-Thread时钟管理

操作系统需要通过时间来规范其任务,主要介绍时钟节拍和基于时钟节拍的定时器。 时钟节拍 任何操作系统都需要提供一个时钟节拍,以供系统处理所有和时间有关的事件,如线程的延时、线程的时间片轮转调度以及定时器超时等。 RT-Thread 中,时钟节拍的长度可以根据 RT_TICK_P…

打造一套属于自己的php开发框架(一)封装Db类

一直使用thinkphp或者laravel框架&#xff0c;越到后面越发现&#xff0c;这些框架占用太大了&#xff0c;最主要的是很多东西完全用不到&#xff0c;我就想为啥不能自己封装一个&#xff1f;想到就搞&#xff0c;这个是一个Db类&#xff0c;主要封装了MySQL的增删改查方法&…