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

【C语言】数组(下)

【C语言】数组(下)

  • 6、二维数组的创建
    • 6.1二维数组的概念
    • 6.2二维数组的创建
  • 7、二维数组的初始化
    • 7.1不完全初始化
    • 7.2完全初始化
    • 7.3按照行初始化
    • 7.4初始化时可以省略行,但是不能省略列
  • 8、二维数组的使用
    • 8.1 二维数组的下标
    • 8.2二维数组的输入和输出
  • 9、二维数组在内存中的存储
  • 10、C99中的变长数组

6、二维数组的创建

6.1二维数组的概念

通过数组(上)介绍,我们学习了一维数组,数组的元素都是内置类型的,如果我们把一维数组作为数组的元素,这时就是二维数组,以此类推,如果把二维数组作为数组的元素,那么被称为三维数组。二维数组以上的我们称为多维数组

以下为图例:
在这里插入图片描述

6.2二维数组的创建

二维数组的语法如下:

type arr_name[常量值1][常量值2];
eg:
int arr[5][3];
double score[5][10];

解释:

  • int类型数组中5代表有5行;
  • int类型数组中3代表有3列;
  • int表示二维数组中每个元素的类型都是整型类型。
  • arr 是数组名称,可以根据自己的需要来创建。

7、二维数组的初始化

在前面创建变量的时候我们往往需要进行初始化,这是学习编程的一个好的习惯。那么在二维数组中我们也可以给定一些初始值,这样被称为二维数组的初始化

二维数组的初始化也和一维数组初始化的方法一致,都是在大括号里面给定一些初始值进行初始化的。

7.1不完全初始化

int arr1[4][6]={5,6};
int arr2[3][2]={0};

不完全初始化初始值存放如下图所示:
在这里插入图片描述

7.2完全初始化

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

在这里插入图片描述

7.3按照行初始化

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

在这里插入图片描述

7.4初始化时可以省略行,但是不能省略列

int arr5[][8]={1,2,3,4,5};
int arr6[][6]={1,2,3,4,5,6,7,8,9};
int arr7[][5]={{1,2},{2,3},{3,4},{4,5}};

在这里插入图片描述

8、二维数组的使用

8.1 二维数组的下标

二维数组的访问跟一维数组一样也是使用下标的形式,二维数组是有行和列的,确定了数组中某个元素的行和列后就能锁定数组中的某个元素。

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

在这里插入图片描述
图中左侧0、1、2表示行数,上面的数字表示列数。我们找二维数组的元素都是从行号0和列号0开始的,比如,第一行第三列的元素是5.
在这里插入图片描述
代码运行结果如图所示:
在这里插入图片描述

8.2二维数组的输入和输出

访问二维数组的单个元素的方法介绍之后,那么如何访问整个二维数组呢?
只要我们能够想办法按照一定的规律产生所有的行和列的数字就可以,以上面的代码为例子,行的范围在0-2;列的范围在0-4,我们可以借助循环来实现生成所有的下标。
在这里插入图片描述

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

像⼀维数组⼀样,我们如果想研究⼆维数组在内存中的存储⽅式,我们也是可以打印出数组所有元素
的地址的。代码如下:

在这里插入图片描述
通过输出的结果可以看出:每一行内部的每个元素都是相邻的,地址之间相差4个字节,跨⾏位置处的两个元
素(如:arr[0][4]和arr[1][0])之间也是差4个字节,所以⼆维数组中的每个元素都是连续存放的

在这里插入图片描述

10、C99中的变长数组

在C99标准之前,C语言在创建数组的时候,数组大小的指定只能使用常量、常量表达式,或者如果我
们初始化数据的话,可以省略数组大小。 (在C99之后引入变长数组的概念,使得数组大小可以用变量表示,但是VS2022版本不支持变长数组,即使用变量指定数组的大小)

int arr1[10];
int arr2[3+5];
int arr3[]={1,2,3};

这样的语法限制,让我们创建数组就不够灵活,有时候数组大了浪费空间,有时候数组又小了不够使用
的。

http://www.lryc.cn/news/451948.html

相关文章:

  • cGANs with Projection Discriminator
  • mysql学习教程,从入门到精通,SQL HAVING 子句(32)
  • JavaScript while循环语句
  • 49天精通Java(Day 2):Java的基本语法
  • uni-app之旅-day01-home页
  • Vue3轻松实现导出Excel文件功能
  • 在Kali Linux中使用VNC和iptables配置xrdp以实现远程连接
  • 小徐影院:Spring Boot技术下的影院革新
  • 命名空间
  • 使用 Elastic 将 AI 摘要添加到你的网站
  • dOOv:Java 数据验证与映射库(简化业务逻辑)
  • Arthas sc(查看JVM已加载的类信息 )
  • OCR 行驶证识别 离线识别
  • PHP泛目录生成源码,可生成长尾关键词页面,带使用方法视频教程
  • LeetCode题练习与总结:丑数--263
  • 初识C语言(五)
  • Linux:深入理解冯诺依曼结构与操作系统
  • 面试中顺序表常考的十大题目解析
  • 测试管理新增视图与高级搜索功能,测试计划支持一键生成缺陷详情,MeterSphere开源持续测试工具v3.3版本发布
  • TypeScript 算法手册 【归并排序】
  • 生信名词|MOA|基因敲低与基因敲除|DMSO|MODZ|生信基础
  • 基础岛第3关:浦语提示词工程实践
  • vscode中配置python虚拟环境
  • chatGPT对我学术写作的三种帮助
  • 【PostgreSQL 】入门篇——支持的各种数据类型介绍,包括整数、浮点数、字符串、日期、JSON、数组等
  • 野火STM32F103VET6指南者开发板入门笔记:【1】点亮RGB
  • 数据工程师岗位常见面试问题-3(附回答)
  • 强大的JVM监控工具
  • python 实现点的多项式算法
  • Pikachu-暴力破解-验证码绕过(on client)