C语言 二维数组

二维数组

1.二维数组的定义

定义形式:类型  数组名[行数][列数]

int a[2][3]; // 共2行3列,6个元素

 

2.二维数组的存储

* C语言把二维数组当作是一维数组的集合,即二维数组是一个特殊的一维数组:它的元素是一维数组。例如int a[2][3]可以看作由一维数组a[0]和一维数组a[1]组成,这两个一维数组都包含了3个int类型的元素

 

* 二维数组的存放顺序是按行存放的,先存放第一行的元素,再存放第2行的元素。例如int a[2][3]的存放顺序是:a[0][0] → a[0][1] → a[0][2] → a[1][0] → a[1][1] → a[1][2]

 

* 再来看看在内存中的存储情况,例如int a[2][2]

(注意:a[0]、a[1]也是数组,是一维数组,而且a[0]、a[1]就是数组名,因此a[0]、a[1]就代表着这个一维数组的地址)

1> 数组a的地址是ffc1,数组a[0]的地址也是ffc1,即a = a[0];

2> 元素a[0][0]的地址是ffc1,所以数组a[0]的地址和元素a[0][0]的地址相同,即a[0] = &a[0][0];

3> 最终可以得出结论:a = a[0] = &a[0][0],以此类推,可以得出a[1] = &a[1][0]

 

3.二维数组的初始化

* 按行进行初始化

int a[2][3] = { {2, 2, 3}, {3, 4, 5} };

 

按存储顺序进行初始化(先存放第1行,再存放第2行)

int a[2][3] = {2, 2, 3, 3, 4, 5};

 

对部分元素进行初始化

int a[2][3] = { {2}, {3, 4} };
int b[3][3] = { { }, { , , 2}, {1, 2, 3}};

 

如果只初始化了部分元素,可以省略行数,但是不可以省略列数

int a[][3] = {1, 2, 3, 4, 5, 6};
int a[][3] = {{1, 2, 3}, {3, 5}, {}};

有些人可能想不明白,为什么可以省略行数,但不可以省略列数。也有人可能会问,可不可以只指定行数,但是省略列数?

其实这个问题很简单,如果我们这样写:

int a[2][] = {1, 2, 3, 4, 5, 6}; // 错误写法
//如果不知道列数 第一行不知道存储多少个 就全部存在第一行 第二行就没有意义了
posted @ 2014-10-24 20:13  杯水文圣  阅读(296)  评论(0编辑  收藏  举报