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

day12

二维数组的概念

二维数组是相同数据类型元素按行和列排列的矩形集合,可以把二维数组写成行和列的排列形式来理解二维数组的逻辑结构。

站在一维数组的基础上理解二维数组,可以理解为:二维数组是把一维数组作为数组的元素。

二维数组的创建和初始化

语法如下:

type arr_name[常量值1][常量值2];

创建示例:

int arr[2][3];

表示定义了一个2行3列的数组。

完全初始化

#include<stdio.h> int main() { int arr[4][2] = { 1,2,3,4,5,6,7,8}; return 0; }

程序会根据2行3列的方式依次进行初始化.

指定行和列进行初始化
#include<stdio.h> int main() { int arr1[2][3] = { {1,2,3},{4,5,6} }; int arr2[2][3] = { {1,2},{4} }; return 0; }
不完全初始化
#include<stdio.h> int main() { int arr1[2][3] = { {1,2,3},{4,5,6} }; int arr2[2][3] = { {1,2},{4} }; return 0; }

在定义数组时可以省略行,不能省略列。

二维数组的访问

二维数组的访问是通过[]的方式进行访问,如上图所示如要确定arr1中数据3的位置,我们可以通过行和列确定。行为0,列为2. 在C语言中确定方式为:数组名[行][列]的方式。、

  • arr[0][2]: 对应数据为:3
  • arr[1][0]: 对应数据为:4
  • arr[1][2]: 对应数据为:6

通过数组下标访问元素

访问单独数据
#include<stdio.h> int main() { int arr[2][3] = { 1,2,3,4,5,6 }; printf("%d\n",arr[0][2]); printf("%d\n",arr[1][0]); printf("%d\n",arr[1][2]); return 0; }
访问数组当中的所有数据
#include<stdio.h> int main() { int arr[2][3] = { 1,2,3,4,5,6 }; int row = 2; int col = 3; for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { printf("%d ", arr[i][j]); } printf("\n"); } return 0; }
给数组输入元素
#include<stdio.h> int main() { int arr[2][3]; int row = 2; int col = 3; for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { scanf("%d", &arr[i][j]); } } for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { printf("%d ", arr[i][j]); } printf("\n"); } return 0;

在这个过程中

for (int i = 0; i < row; i++)

这是一个常见的访问/输出一个数组内的数据的方式,在day10中也用了这类似的for循环·。

二维数组在内存当中的存储

二维数组的内存特性

数组本身就是一块连续的存储空间,所以无论是一维数组还是二维数组,我们通过打印地址可以发现内存确实是连续的空间。

#include<stdio.h> int main() { int arr[2][3] = {0}; int row = 2; int col = 3; for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { printf("&arr[%d][%d] = %p\n", i, j, &arr[i][j]); } } return 0; }

C99中的变长数组

在C99标准之前,C语言在创建数组的时候,数组大小的指定只能使用常量、常量表达式,或者如果我们初始化数据的话,可以省略数组大小。

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

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

C99中给一个变长数组(variable-length array,简称 VLA)的新特性,允许我们可以使用变量指定数组大小。请看下面的代码:

int n = a + b; int arr[n];

上面示例中,数组arr就是变长数组,因为它的长度取决于变量n的值,编译器没法事先确定,只有运行时才能知道n是多少。
变长数组的根本特征,就是数组长度只有运行时才能确定,所以变长数组不能初始化

变长数组的好处是:

  • 程序员不必在开发时,随意为数组指定一个估计的长度,程序可以在运行时为数组分配精确的长度。
  • 有一个比较迷惑的点,变长数组的意思是数组的大小是可以使用变量来指定的,在程序运行的时候,根据变量的大小来指定数组的元素个数,而不是说数组的大小是可变的。数组的大小一旦确定就不能再变化了。
http://www.jsqmd.com/news/1146121/

相关文章:

  • 2026最新实测:什么八字排盘软件好用?第三方测评拆到排盘底层
  • 2026微博图片去水印工具教程:免费在线电脑手机通用方法
  • 用 Ace Data Cloud 快速接入 Luma AI 视频生成 API
  • QRazyBox终极指南:免费开源二维码修复工具,轻松恢复损坏的二维码
  • 伯恩斯坦多项式SDF:让控制屏障函数真正感知几何不确定性
  • 2026年河北标书撰写,专业团队如何助您脱颖而出?
  • Minecraft 1.21终极中文体验:如何快速掌握Masa模组全家桶汉化完整指南
  • Three.js 跳动的心教程
  • 医疗系统受勒索袭击案例启发: 漏洞管理与医疗数据备份恢复策略
  • WayCa鲲鹏硬件生态路线图:未来发展与技术趋势深度分析
  • openeuler/ha-monitor路线图:未来功能规划与待实现特性详解
  • Unity游戏多语言本地化完整实战指南:5步实现专业级翻译解决方案
  • 3D模型优化终极指南:用Cats Blender Plugin一键搞定VRChat模型
  • printf 格式化字符串实战:5个高级技巧实现表格对齐与数据美化
  • 2026快手视频去水印工具教程:免费安全工具、网站与APP用法
  • 一线电工实测:戴上AR眼镜后,巡检效率提升了300%
  • 免费音频转换神器fre:ac:从新手到高手的完整指南
  • WarcraftHelper终极指南:让你的魔兽争霸3在现代电脑上焕然新生
  • 别让学历成为天花板:温州民营经济高质量发展下的人才升级密码
  • 结构化交互:多机器人协同的性能破局关键
  • 抖音无水印视频下载终极指南:三步完成高清批量下载
  • 10分钟掌握openeuler/ha-api资源管理:从配置到故障转移的实用技巧
  • 2026最新6款企业级AI编程助手基础版免费实测合集
  • IT供应商管理:为什么外包团队越来越多,IT问题反而更难追踪?
  • 吃透云客服系统:从底层架构、核心技术到生产落地|2026 技术科普干货
  • 太流批,把Windows治得服服帖帖
  • 零成本上线监控系统:HertzBeat + Hugging Face Spaces 实战指南
  • 如何挑选轻奢高级的冲孔与雕花铝单板 建筑装饰必看
  • 5款VLC皮肤终极指南:简单三步让你的播放器焕然一新
  • 2026实测豆包去水印方法:图片视频完整实操教程