鱼C论坛

 找回密码
 立即注册
查看: 2592|回复: 0

[技术交流] 《带你学C带你飞》第二十讲:二维数组

[复制链接]
发表于 2018-1-1 18:48:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 shuiyu 于 2018-1-3 20:48 编辑

越努力,越幸运。欢迎大家来看我的笔记,不对的请各位大佬指正,谢谢

一、二维数组的定义
(1)定义二维数组的方法跟一位数组相似,使用方括号指定每个维度的元素个数: 类型 数组名[常量表达式1][常量表达式2]
[
color=Red](2)这里需要强调的是几行几列我们是从概念模型上来看的,也就是说,这样来看待二维数组,我们可以更容易理解。但从物理模型上看,无论是二维数组还是更多维的数组,在内存中仍然是以线性的方式存储的。
  1. 如:int b[4][5];
复制代码

1.png

(3)从图中我们不难看出,二维数组事实上就是在一维数组的基础上,每个元素存放一个数组。同样道理,三维数组,四维数组都是以同样的方式实现。

二、二维数组的访问和初始化
(1)跟访问一位数组相似,同样是使用下标访问数组中的元素。
  1. a[0][0]; // 访问a数组中第1行第1列的元素
  2. b[1][3]; // 访问b数组中第2行第4列的元素
  3. c[3][3]; // 访问c数组中第4行第4列的元素
复制代码


(2) 同样需要注意下标的取值范围,以防止数组的越界访问。比如 int a[3][4],其“行下标”的取值范围是 0~2,“列下标”的取值范围是 0~3,超出任何一个下标的访问都会造成越界。

三、二维数组的初始化
(1)由于二维数组在内存中是线性存放的,因此可以将所有的数据写在一个花括号内:
  1. int a[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
复制代码

(2)为了更直观地表示元素的分布,可以用大括号将每一行的元素括起来:
  1. int a[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
复制代码

(3)二维数组也可以仅对部分元素赋初值:
  1. int a[3][4] = {{1}, {5}, {9}};
复制代码

(4)如果希望整个二维数组初始化为0,那么直接在大括号里写一个0即可:
  1. int a[3][4] = {0};
复制代码

(5)C99 同样增加了一种新特性:指定初始化的元素。这样就可以只对数组中的某些指定元素进行初始化赋值,而未被赋值的元素自动初始化为 0:
  1. int a[3][4] = {[0][0] = 1, [1][1] = 2, [2][2] = 3};
复制代码

(6)二维数组的初始化也能偷懒,让编译器根据元素的数量计算数组的长度。但只有第 1 维的元素个数可以不写,其他维度必须写上:
  1. int a[][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
复制代码


PS:矩阵的转置:其实就是先输出每行的第一个,然后第二个,以此类推。。。
如图:上面的是没转置的,下面的是转置了的(代码也是转置了的代码
2.PNG

PS:复习复习:
  1. a>b ? printf("a比b大!\n") : printf("b比a大!\n");
复制代码

相当于:
  1. if(a>b)  
  2. {  
  3.     printf("a比b大!\n");  
  4. }   
  5. else  
  6. {  
  7.     printf("a不比b大!\n");  
  8. }  
复制代码





谢谢小甲鱼带来的视频教程,感谢!!

本节结束,多谢览阅!
越努力,越幸运。谢谢大家来看我的笔记,不对的请各位大佬指教,谢谢

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 00:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表