C++二维数组:概念、创建、初始化与操作详解
创作时间:
作者:
@小白创作中心
C++二维数组:概念、创建、初始化与操作详解
引用
CSDN
1.
https://blog.csdn.net/2201_75539691/article/details/144937755
本文是一篇关于C++二维数组的详细教程,内容涵盖了二维数组的概念、创建、初始化、访问和操作等多个方面。文章结构清晰,通过理论讲解结合代码示例的方式,帮助读者全面理解二维数组的使用方法。此外,文章还介绍了使用memset函数进行数组初始化的方法,并提供了具体的示例代码。
二维数组的概念
在学习了一维数组之后,我们对数组有了基本认识:一维数组是一个连续的内存区域,其元素是同一类型的数据。
二维数组,则可以理解为“数组的数组”:它不仅仅是连续内存中的元素,而是连续内存中包含了多个一维数组。这些一维数组又是于同一类型。
图示:一维数组和二维数组的连续性
二维数组的创建和初始化
1.创建二维数组
在 C++ 中,二维数组的创建较一维数组最基本。
语法:
数据类型 数组名[ 行数 ][ 列数 ];
示例:
int arr[3][5]; // 定义一个 3 行 5 列的整数数组
double data[2][8]; // 定义一个 2 行 8 列的浮点数组
2.初始化二维数组
在创建或者说明数组时,为其添加初始值,称为“初始化”。
初始化方式一:不完全初始化
int arr1[3][5] = {1, 2}; // 初始化仅前两个值,其余表充为 0
int arr2[3][5] = {0}; // 数组中所有元素初始化为 0
初始化方式二:完全初始化
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}
};
初始化方式四:省略行数
如果想省略行数,则初始化中数据能自动推定数组行数:
int arr5[][5] = {1, 2, 3};
int arr6[][5] = {1, 2, 3, 4, 5, 6, 7};
int arr7[][5] = {{1, 2}, {3, 4}, {5, 6}};
二维数组的访问和输出
1.二维数组的访问
二维数组使用二重下标访问:二重下标分别表示行和列。
C++设定:行和列从 0 开始,也即第一行和第一列的下标均为 0。
如:查看第2行第4列,则为:
cout << arr[2][4] << endl;
如果有二维数组:
int arr[3][5] = {
{1, 2, 3, 4, 5},
{2, 3, 4, 5, 6},
{3, 4, 5, 6, 7}
};
则:
- arr[2][4] = 第3行第5列的值,即 7。
二维显示:
二维数组 arr:
0 1 2 3 4
0 1 2 3 4 5
1 2 3 4 5 6
2 3 4 5 6 7
2.二维数组的遍历和打印
对二维数组,可以通过层层循环(外循环遍历行,内循环遍历列)实现打印。
示例代码:
#include <iostream>
using namespace std;
int main()
{
int arr[3][5] = {
1, 2, 3, 4, 5,
2, 3, 4, 5, 6,
3, 4, 5, 6, 7
};
for (int i = 0; i < 3; i++) // 遍历行
{
for (int j = 0; j < 5; j++) // 遍历列
{
cout << arr[i][j] << " "; // 打印每个元素
}
cout << endl; // 换行
}
return 0;
}
输出结果:
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
解析:
- 嵌套循环:
- 外层循环控制行数 i(从 0 到 2,总共 3 行)。
- 内层循环控制列数 j(从 0 到 4,每行 5 列)。
- cout << arr[i][j] << " " :每次输出一个元素,后面紧跟空格,确保同一行的元素在一行打印。
- 换行:每次打印完一行后,cout << endl; 用于换行。
二维数组内容设置:使用 memset 初始化
memset 是 C/C++ 中的标准库函数,用来将指定内存块的内容设置为某个固定值。它可以快速初始化数组或将数组重置为某个值。
示例1:将二维数组所有值初始化为 0
#include <iostream>
using namespace std;
int main()
{
int a[10][10]; // 定义一个10x10的二维数组
memset(a, 0, sizeof(a)); // 将数组的所有字节初始化为0
for (int i = 0; i < 10; i++) // 遍历行
{
for (int j = 0; j < 10; j++) // 遍历列
{
cout << a[i][j] << " "; // 打印元素
}
cout << endl; // 换行
}
return 0;
}
示例2:将二维数组的所有字节设置为字符 a
#include <iostream>
using namespace std;
int main()
{
char a[10][10]; // 定义一个10x10的字符型二维数组
memset(a, 'a', sizeof(a)); // 将数组的所有字节设置为字符'a'
for (int i = 0; i < 10; i++) // 遍历行
{
for (int j = 0; j < 10; j++) // 遍历列
{
cout << a[i][j] << " "; // 打印元素
}
cout << endl; // 换行
}
return 0;
}
输出结果:
示例1:
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
...
示例2:
a a a a a a a a a a
a a a a a a a a a a
...
注意事项:
- memset 是按字节设置值的。
- 对于整型数组,memset(a, 0, sizeof(a)); 是可行的,因为所有字节都被设置为 0,最终值也是 0。
- 但是如果用 memset(a, 1, sizeof(a)); ,每个字节被置为 1,会产生意想不到的值(非 1)。
- memset 适合字符型数组或所有字节统一设置为 0 的场景。
总结
通过本文,我们深入学习了 C++ 中的二维数组:从基本概念到创建、初始化和访问,再到如何高效遍历和打印二维数组,最后讨论了 memset 在数组初始化中的应用。掌握这些内容,不仅可以帮助我们解决实际开发中的问题,也为进一步学习更复杂的数据结构打下了基础。
热门推荐
人生哲理警句101句
天津医科大学2024年就业数据分析:医学生就业竞争加剧
“代下单”悄然兴起 一次能省一半钱?专家:新型消费方式虽划算却有风险
官方正规网络借贷平台的法律框架与合规运营
天线弹片的作用:提高信号稳定性与性能的关键组件
医疗事故:风险、挑战与应对策略
家庭采暖方式大PK,究竟要怎么选?
哈登生涯五大纪录:从最佳第六人到MVP的传奇之路
'斗地主骗炸大师': 策略与心理战的艺术,一局定乾坤
AI技术游四海,智慧旅游探索新未来
工匠精神:传承千年的文化瑰宝与现代启示
如何在法律领域有效提高个人情商能力
股市中的操作技巧有哪些?股市里什么叫对到有哪些风险?
服务器CPU选择指南:英特尔Xeon与AMD EPYC的性能对比与应用分析
如何确保印刷质量的稳定性和优化成本
多所高校宣布“转专业自由” 人才培养模式迎来新调整
基金定投的收益率与投资策略
二极管的整流原理详解:从半波到全波整流电路
重载铁路的朔黄模式
原神丝柯克角色强度怎么样,丝柯克角色实力全解析
2024年抗肿瘤药物行业现状分析:全球市场支出达2160亿美元
十大广州特色 广州地方特色 广州城市特色文化符号
新华社《瞭望》聚焦湖州:尚新破浪
芍药花语:从历史传说、文化内涵到园艺栽培的全面解读
移动应用隐私合规的技术实现与代码示例
妇女节赏才女诗词:婉约透豪迈,柔弱见强刚!
困局与突围:中国当代艺术的冰火两重天
2025年江苏高考总分及试卷难度分析
资治通鉴:一部编年体史书的巅峰之作
业内:今年广州楼市“价值回归”,当前政策对购房者有何影响?