业界动态
【C++】二维数组:概念、创建、初始化与操作
2025-01-12 14:28

在这里插入图片描述

博客主页 [小ᶻ☡꙳ᵃⁱᵍᶜ꙳]
本文专栏: C++


在这里插入图片描述


  • 在 C++ 学习中,数组是最基础且常用的数据结构之一,而二维数组更是实现日常计算中一维数组无法解决的复杂问题的重要工具。本文将深入解释 C++ 中二维数组的概念、创建、初始化与操作,并尤其深入学习怎样使用它在实际中解决问题。
    C++ 参考手册
    在这里插入图片描述

在学习了一维数组之后,我们对数组有了基本认识:一维数组是一个连续的内存区域,其元素是同一类型的数据。

二维数组,则可以理解为“数组的数组”:它不仅仅是连续内存中的元素,而是连续内存中包含了多个一维数组。这些一维数组又是于同一类型。

  1. 一维数组:包含同一类型数据元素。
  2. 二维数组:它是一个“包含了多个一维数组的数组”,将数据作为行和列分布,实现于内存。

如下图,展示了一维数组和二维数组的连续性
在这里插入图片描述

图示

一维数组二维数组int arr[5]:连续内存。int arr[3][5]:用行和列分布数据。

而如果二维数组重叠(二维数组内元素为数组,就是三维数组。依此类推,可实现多维数组,这为高维数据处理提供了基础。


在 C++ 中,二维数组的创建较一维数组最基本。

语法

 

示例

 
 
  1. 行数与列数
    • 表示数组有 3 行
    • 表示每行有 5 个元素。
  2. 数据类型
    • : 表示二维数组的每个元素是整数类型。
  3. 数组名
    • ,用于标识数组,是你在代码中呼叫它的方式。
  4. 值字应与合
    • 举例:行数和列数必须是常量,无法用变量指定。

在创建或者说明数组时,为其添加初始值,称为“初始化”。

举例

如果想初始化数组,二维数组使用大括号。

初始化方式一:不完全初始化

 

初始化方式二:完全初始化

 

初始化方式三:按行初始化

 

初始化方式四:省略行数

如果想省略行数,则初始化中数据能自动推定数组行数

 

二维数组使用二重下标访问:二重下标分别表示行和列。

C++设定:行和列从 0 开始,也即第一行和第一列的下标均为 0。

:查看第2行第4列,则为

 

如果有二维数组

 

  • arr[2][4] = 第3行第5列的值,即 7。

二维显示

二维数组 arr

01234012345123456234567

对二维数组,可以通过层层循环(外循环遍历行,内循环遍历列)实现打印。

示例代码

 

输出结果

 

解析

  • 嵌套循环
    • 外层循环控制行数 (从 到 ,总共 3 行)。
    • 内层循环控制列数 (从 到 ,每行 5 列)。
    • 每次输出一个元素,后面紧跟空格,确保同一行的元素在一行打印。
  • 换行
    • 每次打印完一行后, 用于换行。

是 C/C++ 中的标准库函数,用来将指定内存块的内容设置为某个固定值。它可以快速初始化数组或将数组重置为某个值。

示例1:将二维数组所有值初始化为

 

示例2:将二维数组的所有字节设置为字符

 

输出结果

示例1

 

示例2

 

注意事项

  1. 是按字节设置值的。
    • 对于整型数组, 是可行的,因为所有字节都被设置为 ,最终值也是 。
    • 但是如果用 ,每个字节被置为 ,会产生意想不到的值(非 1)。
  2. 适合字符型数组或所有字节统一设置为 的场景。

通过本文,我们深入学习了 C++ 中的二维数组:从基本概念到创建、初始化和访问,再到如何高效遍历和打印二维数组,最后讨论了 在数组初始化中的应用。掌握这些内容,不仅可以帮助我们解决实际开发中的问题,也为进一步学习更复杂的数据结构打下了基础。


在这里插入图片描述


在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
学习 C++ 的过程如同一场探索复杂编程世界的旅程。在这个旅途中,我深刻体会到了 C++ 的强大,同时也感受到它的复杂性。以下是我的一些学习心得和感悟,希望能够对正在学习 C++ 的朋友们有所帮助。

扎实基础是关键
C++ 的复杂性往往体现在它是一个“多范式”的编程语言,既支持面向过程,也支持面向对象,同时还提供了现代化的泛型编程和函数式编程能力。在学习初期,掌握基础概念非常重要,例如

  • 变量和数据类型 理解变量的作用域、生命周期,熟悉基础类型(如 、)以及它们的内存占用。
  • 控制流 熟练掌握 、、 等基本语法结构,这是编程逻辑的核心。
  • 数组和指针 理解一维数组、二维数组,特别是指针与数组之间的关系,以及指针的实际用途。

基础知识扎实,才能在后续深入学习复杂特性时不被细节绊住脚步。

理解面向对象编程的核心
C++ 是一门面向对象的语言,OOP(Object-Oriented Programming)是其核心思想之一。在学习面向对象编程时,我总结出以下几点心得

  • 类与对象 理解类是对象的模板,而对象是类的具体实例。要清楚类的定义和对象的创建过程。
  • 封装性 通过 、 和 等访问权限控制,保护对象的内部状态。
  • 继承性 学会通过继承复用已有代码,并理解多态的作用。尤其需要搞清楚虚函数的机制和作用。
  • 多态性 理解动态绑定和静态绑定的差异,虚函数表(vtable)的概念对理解多态背后的实现至关重要。

抓住 C++ 的现代特性
C++ 从最初的 C++98 到现在的 C++20,语言特性发生了巨大的变化。学习现代 C++ 特性不仅可以让代码更简洁高效,也可以大幅提升程序的可读性。以下几个现代特性是我学习中的重点

  • 智能指针(Smart Pointer 传统指针的内存管理很复杂,而现代 C++ 提供了 、 等智能指针,大大简化了内存管理。
  • STL(标准模板库 STL 是 C++ 的一大优势,学习如何使用容器(如 、、)和算法(如 、)可以大幅提高开发效率。
  • lambda 表达式 学习 lambda 表达式可以帮助写出简洁的代码,尤其是在配合 STL 算法时。
  • constexpr 和 auto 这些特性使代码更加灵活高效,例如 在编译期计算常量, 自动推导变量类型。

学会调试和优化
编程不可能一次成功,尤其是面对复杂的 C++ 程序,调试能力显得尤为重要。我在学习过程中发现,掌握以下调试技巧非常关键

  • 使用调试器 熟练使用 或 IDE(如 VSCode、CLion)的调试工具,能快速定位问题。
  • 日志输出 在关键位置添加调试信息,可以快速了解程序的运行状态。
  • 内存调试 借助工具(如 )检查内存泄漏和未定义行为,这对 C++ 尤其重要。

同时,在程序优化方面,也需要不断思考如何让代码更高效

  • 算法优化 优化算法的时间复杂度和空间复杂度。
  • 避免冗余拷贝 使用引用传递)或移动语义)。
  • 线程并发 学习 C++ 的多线程支持(如 、,在多核时代尤为重要。

理解内存管理的复杂性
C++ 的强大之处在于对内存的直接控制,但这同时也是学习的难点之一。在内存管理方面,我总结了以下几点

  • 动态内存分配 学会使用 和 ,但同时也要理解其局限性。
  • 避免内存泄漏 每次分配的内存必须确保释放,养成良好的编程习惯。
  • RAII(资源获取即初始化 通过构造函数获取资源,析构函数释放资源,避免手动管理资源的复杂性。
  • 智能指针的使用 用智能指针替代裸指针,是现代 C++ 的推荐实践。

实践是最好的老师
学习编程语言的最终目标是使用它解决实际问题。因此,多写代码、多实践是掌握 C++ 的关键。在学习过程中,我尝试做了以下事情

  • 实现数据结构和算法 用 C++ 实现常见的数据结构(如链表、栈、队列)和算法(如排序、搜索)。
  • 编写小项目 比如一个简单的学生管理系统,包含类的定义、文件操作、输入输出等。
  • 参与开源项目 在 GitHub 上寻找 C++ 的开源项目,阅读代码并尝试贡献。

通过实践,我不仅巩固了语法知识,也锻炼了编程思维和解决问题的能力。

坚持学习,永不止步
C++ 是一门深奥的语言,其应用范围极广,从操作系统到图形渲染、从嵌入式开发到游戏引擎,都能看到它的身影。因此,学习 C++ 是一个持续深入的过程。要保持好奇心和耐心,深入理解语言的细节,同时不断学习最新的语言标准和实践方法。

总结
学习 C++ 是一场挑战,也是一场收获满满的旅程。从基础语法到面向对象,从 STL 到现代特性,再到内存管理和性能优化,每一步都让我对编程有了更深的理解。C++ 不仅教会了我编程技能,更让我养成了严谨和高效的思维习惯。

    以上就是本篇文章【【C++】二维数组:概念、创建、初始化与操作】的全部内容了,欢迎阅览 ! 文章地址:http://www78564.xrbh.cn/news/32594.html 
     文章      相关文章      动态      同类文章      热门文章      栏目首页      网站地图      返回首页 迅博思语移动站 http://www78564.xrbh.cn/mobile/ , 查看更多   
最新文章
全球首款支持北斗卫星消息的华为Mate50来了卫星手机「全球首款支持北斗卫星消息的华为Mate50来了」
  2022年9月6日,全新黑科技旗舰王者华为Mate50系列正式发布,领势而上,尽显创新本色。华为Mate系列因创新而生,始终以领先科
ios主题仿苹果苹果手机主题「ios主题仿苹果」
ios主题仿苹果是一款特别专业的主题工具软件,用户自主的下载这款软件以后,就可以进行各种主题的筛选,任意地进行主题的切换,
vivo手机录屏在哪里vivo查找手机「vivo手机录屏在哪里」
在智能手机功能日益丰富的今天,录屏功能已成为许多用户记录手机屏幕操作、分享游戏攻略或制作教程的重要工具。对于vivo手机用户
miui7主题怎么制作 muse主题制作教程怎么制作手机主题「miui7主题怎么制作 muse主题制作教程」
MIUI7系统最大的亮点是什么么?无疑是主题制作工具—muse的现身,那么muse怎么使用呢?小编为大家分享该工具主题制作教程,望采
了解 iPhone 状态图标的含义手机飞行模式是什么意思「了解 iPhone 状态图标的含义」
蜂窝网络信号  信号格的数量表示蜂窝网络服务的信号强度。如果没有信号,会显示“无服务”。双蜂窝网络信号  在上,上方一行
四川成都旅游需要多少钱一个人住?四川成都旅游攻略5日游最佳方案
去四川旅游到底需要多少钱?其实根据个人需求和安排,费用大约在1000元左右,取决于你的规划。以下是我的省钱攻略,供你参考:提
垃圾清理卫士 安卓版 v1.1清理手机垃圾的软件「垃圾清理卫士 安卓版 v1.1」
垃圾清理卫士app是专为安卓手机打造的系统垃圾清理工具,一键深度扫描,极速清理垃圾文件,释放手机内存,支持社交软件专清板块
华为手机华为新品手机「华为手机」
华为 nova 13 Pro于2024年10月15日11点开启预售,10月22日21点30分正式发售。外观设计方面,具备全新升级超级星耀环,采用行业首
使用一年半,记录一下我的坚果PRO3坚果手机「使用一年半,记录一下我的坚果PRO3」
去年刚过完年,手里的魅族15卡得我着实难受,于是就有了换机的计划。使用过苹果(iphone 6)、小米(小米3)、oppo(R1C)、锤子