二维数组本质

  1. 二维数组本质就是一维数组,只不过**形式是二维**,类似矩阵,使用二维数组表示会更加形象。

二维数组实例

  1. float rain[5][12]; //内含5个数组元素的数组,每个数组元素内含12个float类型的元素,形如5行12列的表格
  1. 形式如表1-1所示:
第一列 第二列 第三列 第四列 第五列 第六列 第七列 第八列 第九列 第十列 第十一列 第十二列
第一行 rain[0][0] rain[0][1] rain[0][2] rain[0][3] rain[0][4] rain[0][5] rain[0][6] rain[0][7] rain[0][8] rain[0][9] rain[0][10] rain[0][11]
第二行 rain[1][0] rain[1][1] rain[1][2] rain[1][3] rain[1][4] rain[1][5] rain[1][6] rain[1][7] rain[1][8] rain[1][9] rain[1][10] rain[1][11]
第三行 rain[2][0] rain[2][1] rain[2][2] rain[2][3] rain[2][4] rain[2][5] rain[2][6] rain[2][7] rain[2][8] rain[2][9] rain[2][10] rain[2][11]
第四行 rain[3][0] rain[3][1] rain[3][2] rain[3][3] rain[3][4] rain[3][5] rain[3][6] rain[3][7] rain[3][8] rain[3][9] rain[3][10] rain[3][11]
第五行 rain[4][0] rain[4][1] rain[4][2] rain[4][3] rain[4][4] rain[4][5] rain[4][6] rain[4][7] rain[4][8] rain[4][9] rain[4][10] rain[4][11]
  1. 注:表1-1中每个单元格代表一个元素
  2. 示例代码如下:
  1. /***********************************
  2. * @file rain.c
  3. * @author bijiaqin
  4. * @date 2019年12月1日
  5. * @note 二维数组示例,计算每年降水量、平均降水量和五年中每月的平均降水量
  6. * *********************************
  7. */
  8. #include "stdio.h"
  9. #include "stdint.h"
  10. #define MONTHS 12
  11. #define YEARS 5
  12. int main(void)
  13. {
  14. const float rain[YEARS][MONTHS] = {
  15. {4.3, 4.3, 4.3, 3.0, 2.0, 1.2, 0.2, 0.2, 0.4, 2.4, 3.5, 6.6},
  16. {8.5, 8.2, 1.2, 1.6, 2.4, 0.0, 5.2, 0.9, 0.3, 0.9, 1.4, 7.3},
  17. {9.1, 8.5, 6.7, 4.3, 2.1, 0.8, 0.2, 0.2, 1.1, 2.3, 6.1, 8.4},
  18. {7.2, 9.9, 8.4, 3.3, 1.2, 0.8, 0.4, 0.0, 0.6, 1.7, 4.3, 6.2},
  19. {7.6, 5.6, 3.8, 2.8, 3.8, 0.2, 0.0, 0.0, 0.0, 1.3, 2.6, 5.2}
  20. };
  21. int year, month;
  22. float subtot, total;
  23. for(year = 0, total = 0; year < YEARS; year ++)
  24. {
  25. for(month = 0, subtot = 0; month < MONTHS; month ++)
  26. {
  27. subtot += rain[year][month]; /**< 每一年各月的降水量总和 */
  28. }
  29. printf("%5d %12.1f\n", 2010 + year, subtot);
  30. total += subtot; /*< 5年总降水量 */
  31. }
  32. printf("\n");
  33. printf("The yearly average is %.1f inches. \n\n", total / subtot);
  34. printf("Monthly avergaes: \n\n");
  35. printf(" Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec\n");
  36. for(month = 0; month < MONTHS; month ++)
  37. {
  38. for(year = 0; year < YEARS; year ++)
  39. {
  40. subtot += rain[year][month]; /**< 每年总降水量 */
  41. }
  42. printf("%4.1f", subtot / YEARS);
  43. }
  44. printf("\n");
  45. return 0;
  46. }

处理二维数组常用方法

  1. 嵌套循环,如示例代码连续两个两层for循环用来计算总降水量和每个月的总降水量。

关于初始化

  1. 二维数组初始化通常习惯用**花括号套花括号**,中间用','隔开,如上面代码所示,当然也可以省略里面的花括号,只要保证元素个数正确、按行初始化即可,如:
  1. const float rain[YEARS][MONTHS] = {
  2. 4.3, 4.3, 4.3, 3.0, 2.0, 1.2, 0.2, 0.2, 0.4, 2.4, 3.5, 6.6,
  3. 8.5, 8.2, 1.2, 1.6, 2.4, 0.0, 5.2, 0.9, 0.3, 0.9, 1.4, 7.3,
  4. 9.1, 8.5, 6.7, 4.3, 2.1, 0.8, 0.2, 0.2, 1.1, 2.3, 6.1, 8.4,
  5. 7.2, 9.9, 8.4, 3.3, 1.2, 0.8, 0.4, 0.0, 0.6, 1.7, 4.3, 6.2,
  6. 7.6, 5.6, 3.8, 2.8, 3.8, 0.2, 0.0, 0.0, 0.0, 1.3, 2.6, 5.2,
  7. };
  1. 有嵌套花括号时,可按照一维数组的初始化规范,某行数组初始化元素不足时其它位为0,不影响当前行其它数组元素;某行数组初始化元素越界则会出错,但同样不会影响其它行数组的初始化。

二维数组延申——多维数组

  1. 如三维数组
  1. int triArrays[2][3][4] = {
  2. {
  3. {2, [1] = 8, 4}, /**< 第四个元素位初始化,则默认为0,第二个元素使用下标进行初始化
  4. {1, 2, 3, 4},
  5. {1, 2, 3, 4}
  6. },
  7. {
  8. {2, 3, 4, 5},
  9. {2, 3, 4, 5},
  10. {2, 3, 4, 5}
  11. }
  12. };
  1. 多维数组处理方法:
  2. 二维数组采用两层嵌套循环,三层采用三层循环,以此类推。

C语言基础知识(二)——二维数组的更多相关文章

  1. C语言基础知识-数组和字符串

    C语言基础知识-数组和字符串 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数组概述 在程序设计中,为了方便处理数据把具有相同类型的若干变量按有序形式组织起来的方式我们称为数组 ...

  2. Java JDBC的基础知识(二)

    在我的上一篇Java JDBC的基础知识(一)中,最后演示的代码在关闭资源的时候,仅仅用了try/catch语句,这里是有很大的隐患的.在程序创建连接之后,如果不进行关闭,会消耗更多的资源.创建连接之 ...

  3. LeetCode刷题191130 --基础知识篇 二叉搜索树

    休息了两天,状态恢复了一下,补充点基础知识. 二叉搜索树 搜索树数据结构支持许多动态集合操作,包括Search,minimum,maximum,predecessor(前驱),successor(后继 ...

  4. C语言基础知识-运算符与表达式

    C语言基础知识-运算符与表达式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常用运算符分类 1>.算术运算符 用于处理四则运算. 2>.赋值运算符 用于将表达式的 ...

  5. OC语言基础知识

    OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...

  6. 李洪强iOS开发之OC语言基础知识

    OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...

  7. C语言基础知识-程序流程结构

    C语言基础知识-程序流程结构 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.概述 C语言支持最基本的三种程序运行结构:顺序结构,选择结构,循环结构. 顺序结构:程序按顺序执行, ...

  8. C语言基础知识-数据类型

    C语言基础知识-数据类型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常量与变量 1>.关键字 C的关键字共有32个. >.数据类型关键字(12个) char,s ...

  9. C语言中指针和多维数组

    指针和多维数组 数组名是特殊的指针 数组是一个特殊的指针,多维数组也是更为复杂的数组,它们的关系是什么样的呢? 我们通过一个简单的例子来比较形象的了解指针和多维数组: int a[2][3]; 这是一 ...

  10. Golang 入门系列(三)Go语言基础知识汇总

    前面已经了 Go 环境的配置和初学Go时,容易遇到的坑,大家可以请查看前面的文章 https://www.cnblogs.com/zhangweizhong/category/1275863.html ...

随机推荐

  1. eclipse安装Axis2插件和简单的webservice发布

    2019独角兽企业重金招聘Python工程师标准>>> Axis2与CXF是现在很主流的WebService开发框架(java6也已经支持了),项目上还都是基本上用前两种做开发,今天 ...

  2. 源码阅读:Masonry(三)—— MASViewAttribute

    该文章阅读的 Masonry 的版本为 1.1.0. 这个类我们可以叫它"约束视图及其属性类",它封装了设置约束的视图和其设置约束的属性,也就是 view1 和 attr1,或是 ...

  3. 前端存储 (5) - service worker 离线存储

    service worker 离线存储 简介: 一般的网站 在我们无法访问的 时候 一般 回出现 如下 该网页无法访问 service worker 构建的网站不会出现这个错误,因为所有的 请求都是先 ...

  4. 从零开始搭建口袋妖怪管理系统(4)-借助webpack4.6工程化项目(上)

    "手动是不可能手动的了,这辈子都不可能手动的了." 一.目标 上一章我们借助ngRoute,完成了口袋妖怪SPA系统的多模块导航开发,但是现在引用的东西越来越多,项目文件目录开始变 ...

  5. 动态调用webSerivce-简易方法

         大家对webservice已经不再陌生了,涉及到的通信大部分都是用webservice.不过我还是看好wcf,因为毕竟是微软推出的新技术,各个方面还是蛮不错的,特别是你可以利用多种通信方式, ...

  6. PHP版DES算法加密数据(3DES)另附openssl_encrypt版本

    PHP版DES算法加密数据(3DES) 可与java的DES(DESede/CBC/PKCS5Padding)加密方式兼容 <?php /** * Created by PhpStorm. * ...

  7. 在Jetson TX2上显示摄像头视频并使用python进行caffe推理

    参考文章:How to Capture Camera Video and Do Caffe Inferencing with Python on Jetson TX2 与参考文章大部分都是相似的,如果 ...

  8. jquery 根据后端传过来的value值,让小原点根据不同值区间去左右定位

    /** * 小圆点滑动 * @param {目标dom} barEle * @param {最小值} min * @param {最大值} max * @param {dom总长度} domLang ...

  9. GCRoots

    JVM面试汇总 JVM垃圾回收的时候如何确定垃圾?是否知道什么是GC Roots 什么是垃圾 简单来说就是内存中已经不再被使用的空间就是垃圾 如何判断一个对象是否可以被回收 引用计数法 Java中,引 ...

  10. windows远程执行命令总结

    1. 利用Impacket Impacket是一个Python类库,用于对SMB1-3或IPv4 / IPv6 上的TCP.UDP.ICMP.IGMP,ARP,IPv4,IPv6,SMB,MSRPC, ...