C语言导航 6.2二维数组

news/2025/1/2 1:56:30/

第二节 二维数组

  • 二维数组的定义

  • 二维数组的初始化

  • 二维数组的引用

6.2.1二维数组的定义

1.格式:类型 数组名[常量表达式1][常量表达式2];

2.说明:定义二维数组即在内存中开辟一块连续的常量表达式1 *常量表达式2*类型所占字节数大小的空间。

类型:除void类型以外任一种基本数据类型或构造数据类型,表示数据所有元素的类型。

数组名:一种用户自定义并符合变量名命名规则的标识符,表示数组名和数组首行首元素首字节地址。

常量表达式1:用整型常量或值为整型的常量表达式表示数组行数。

常量表达式2:用整型常量或值为整型的常量表达式表示数组每行元素个数。

3.注意:

①在C语言中,二维数组每行的元素数量是由定义的时候决定的,并保持一致。

②数组名表示一个地址常量,是多个行多个元素的统称;数组名 [常量表达式1]也是一个表示该行首元素首地址的常量,是该行多个元素的统称。

③如果在定义时直接进行初始化,可以不加常量表达式1表示行,机器根据初始化元素数量以一次开辟一行的方式直至包含所有初始化元素。

6.2.2二维数组的初始化

1.说明:数组在定义的时候可以利用赋值号加包含元素的“{}”进行初始化,因为是二维数组,所以可以根据“{}”的嵌套关系,依次对每行和每行元素进行初始化。

2.初始化规则:

①部分初始化:在采用两级“{}”初始化时,对于“{}”中的元素依次赋值,对于没有表示的元素,只要初始化了就均为0;而只采用一级“{}”初始化时,将“{}”中的值按行依次赋值。

②完全初始化:即对数组每个元素均进行赋值,初始化的数量不可以超过二维数组总数。

 #include <stdio.h>​int main() {// 示例1:完整初始化int matrix1[3][4] = {{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12}};printf("Example 1: \n");int i,j; for (i = 0; i < 3; ++i) {for (j = 0; j < 4; ++j) {printf("%d ", matrix1[i][j]);}printf("\n");}​// 示例2:部分初始化int array2[4][5] = {{1, 2, 3}, // 剩余元素自动初始化为0{4, 5, 6, 7, 8}, {9} // 仅初始化第一个元素,其余元素默认为0};printf("\nExample 2: \n");for ( i = 0; i < 4; ++i) {for ( j = 0; j < 5; ++j) {printf("%d ", array2[i][j]);}printf("\n");}​// 示例3:忽略行数int arr3[][3] = {1, 2, 3, 4, 5, 6};printf("\nExample 3: \n");for ( i = 0; i < sizeof(arr3)/sizeof(arr3[0]); ++i) {for ( j = 0; j < 3; ++j) {printf("%d ", arr3[i][j]);}printf("\n");}​// 示例4:动态初始化int rows = 3;int cols = 4;int dynamic_matrix[rows][cols];​for ( i = 0; i < rows; ++i) {for ( j = 0; j < cols; ++j) {dynamic_matrix[i][j] = i * cols + j + 1;}}printf("\nExample 4: \n");for ( i = 0; i < rows; ++i) {for ( j = 0; j < cols; ++j) {printf("%d ", dynamic_matrix[i][j]);}printf("\n");}​// 示例5:通过指针访问二维数组(此例中不涉及初始化,只展示如何通过一维数组访问)int flat_array[3 * 4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};int (*ptr)[4] = (int (*)[4])flat_array;​printf("\nExample 5: \n");for ( i = 0; i < 3; ++i) {for ( j = 0; j < 4; ++j) {printf("%d ", ptr[i][j]);}printf("\n");}​return 0;}

6.2.3二维数组的引用

1.说明:引用即是采用下面形式,对数组中元素经行操作。

2.形式:数组名 [下标表达式1][下标表达式2]

3.注意:

①依次表示数组元素时,行列下标是从0开始的,并且行列最大下标不得大于等于定义值。

②下标表达式的值要为整数。

③二维数组在内存中是按行依次存储的,即 数组名[下标表达式1] [下标表达式2]= *(数组名+下标表达式1*常量表达式2+下标表达式2) ,所以在 数组名[0][下标表达式] 这种形式中直接改变下标表达式的值如同操作一维数组。


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

相关文章

macos安装maven以及.bash_profile文件优化

文章目录 下载和安装maven本地仓库配置国内镜像仓库配置.bash_profile文件优化 下载和安装maven maven下载地址 存放在/Library/Java/env/maven目录 本地仓库配置 在maven-3.9.9目录下创建maven-repo目录作为本地文件仓库打开setting配置文件 在setting标签下&#xff0c;添…

ACPI PM Timer

ACPI PM Timer 概述&#xff1a; ACPI PM Timer是一个非常简单的计时器&#xff0c;它以 3.579545 MHz 运行&#xff0c;在计数器溢出时生成系统控制中断&#xff08;SCI&#xff09;。它精度较低&#xff0c;建议使用其他定时器&#xff0c;如HPET或APIC定时器。 检测ACPI P…

【畅购商城】详情页详情之商品详情

1.构建详情页 步骤0&#xff1a;确定访问路径 http://localhost:3000/Goods?id1 步骤二&#xff1a;复制 ~/static/goods.html 内容&#xff0c;导入第三方资源&#xff08;css、js&#xff09; head: {title: 列表页面,link: [{rel:stylesheet,href: /style/goods.css},{re…

【服务器】上传文件到服务器并训练深度学习模型下载服务器文件到本地

前言&#xff1a;本文教程为&#xff0c;上传文件到服务器并训练深度学习模型&#xff0c;与下载服务器文件到本地。演示指令输入&#xff0c;完整的上传文件到服务器&#xff0c;并训练模型过程&#xff1b;并演示完整的下载服务器文件到本地的过程。 本文使用的服务器为云服…

yolov6算法及其改进

yolov6算法及其改进 1、YOLOV6简介2、RepVGG重参思想3、YOLOv6架构改进3.1、Backbone方面3.2、SPP改进3.3、Neck改进3.4、Head改进 4、正负样本匹配与损失函数4.1、TaskAligned样本匹配4.2、VFL Loss分类损失函数4.3、SIOU损失函数4.4、DFL损失函数 1、YOLOV6简介 YOLOv6设计主…

二百八十二、ClickHouse——删除Linux中的ClickHouse

一、目的 由于ClickHosue的库表发生变化&#xff0c;需要删除原有的表结构数据&#xff0c;才能直接把脚本里文件重新安装 二、删除步骤 1、关闭ClickHouse服务 systemctl stop clickhouse-server 2、卸载ClickHouse软件包 sudo yum remove clickhouse-server clickhouse…

读取文件内容、修改文件内容、识别文件夹目录(Web操作系统文件文件夹详解)

前言 因 Unicode IDE 编辑器导入文件、文件夹需要&#xff0c;研究了下导入文件/文件夹的功能实现&#xff0c;发现目前相关文章有点少&#xff0c;故而记录下过程&#xff0c;如果有误&#xff0c;还望指正。(API的兼容性及相关属性、接口定义&#xff0c;请自行查看文件系统…

转运机器人推动制造业智能化转型升级

​在当今制造业智能化转型的浪潮中&#xff0c;技术创新成为企业脱颖而出的关键。富唯转运机器人凭借一系列先进技术&#xff0c;成为智能转型的卓越之选。 一体化 AMR 控制系统是富唯的一大亮点。它采用低代码流程搭建和配置模式&#xff0c;极大地缩短了部署时间。企业无需耗…