业界动态
【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/ , 查看更多   
最新文章
来七星关,慢享生活“森”呼吸~
四月的杨家湾宛如一幅清新淡雅的水墨画满山的樱桃树繁花凋谢后枝头挂满了青绿的嫩果在阳光的轻抚下闪烁着生机与希望清风悠悠拂过
侠盗飞车罪恶都市破解版罪恶都市手机版「侠盗飞车罪恶都市破解版」
侠盗飞车罪恶都市破解版是一款非常热血的犯罪动作类游戏,游戏中拥有高自由度的玩法,玩家将在都市里尽情冒险挑战,剧情丰富,玩
破纪录!中兴红牛17秒售罄 一加惨被汪峰手机新「破纪录!中兴红牛17秒售罄 一加惨被汪峰」
  【PConline北京站 行情】虽然在4月初,三星和HTC都带来了他们的全新旗舰智能手机GALAXY S5和HTC One M8在国内开始销售,并在
江苏苏宁官方宣布拉米雷斯加盟手机加盟「江苏苏宁官方宣布拉米雷斯加盟」
iPhone 6 Plus","userInfo":{"user_id":1915964974,"user_pic":"https://tvax4.sinaimg.cn/crop.68.66.675.675.50/72334e2ely8gn
小蜜蜂手机价格怎么样【详细介绍】小蜜蜂手机「小蜜蜂手机价格怎么样【详细介绍】」
  导语:现在的数码市场,手机永远是一个热 门 产品,在更新换代中产品是在不断的更新。又有 苹果 这样的代表,一年一部的架势
焕然始发|优诺上新希腊酸奶冰淇淋,开启健康美味新体验
  希腊酸奶是目前全球市场体量最大的低温酸奶品类细分品类,而它的增长曲线也堪称奇迹,在美国市场,从2007年市占率不到1%的小
手机支架拆解全攻略:从清洁到重组的必备技巧手机螺丝刀「手机支架拆解全攻略:从清洁到重组的必备技巧」
在现代科技生活中,手机支架已成为人们不可或缺的生活助手。无论是在办公室、家中还是旅行途中,手机支架不仅提高了使用手机的便
晨读·百年工运故事|攻坚:职工技术协作共克时艰
攻坚:职工技术协作共克时艰20世纪50年代末60年代初,新中国遭遇三年自然灾害,农业大面积减产减收,国民经济遭遇较大困难,举国
瞭望 | 上海:项目经理人“链手”总调度科创资源
  上海通过赋予项目经理人“链手”总调度权责,打破传统科技管理模式,先行聚焦脑机接口、量子计算、绿色燃料等六大未来产业,