黑马程序员技术交流社区

标题: 数组交流 [打印本页]

作者: Edware    时间: 2015-8-17 00:15
标题: 数组交流
1.二维数组的基本概念
所谓多维数组就是一个一维数组的每个元素又被声明为一维数组,从而构成二维数组. 可以说二维数组是特殊的一维数组。

示例
int a[2][3]
可以看作由一维数组a[0]和一维数组a[1]组成,这两个一维数组都包含了3个int类型的元素
![](http://7xj0kx.com1.z0.glb.clouddn.com/二维数组.png)

2.二维数组的定义
格式:
数据类型数组名[一维数组的个数][一维数组的元素个数]
        *  数据类型数组名[行数][列数]
其中"一维数组的个数"表示当前二维数组中包含多少个一维数组
其中"一维数组的元素个数"表示当前前二维数组中每个一维数组元素的个数

3.二维数组的初始化
二维数的初始化可分为两种:
定义的同时初始化
        * 按行分段赋值
        * 按行连续赋值
先定义后初始化

定义的同时初始化
int a[2][3]={ {80,75,92}, {61,65,71}};
```
- 先定义后初始化
```
int a[2][3];
a[0][0] = 80;
a[0][1] = 75;
a[0][2] = 92;
a[1][0] = 61;
a[1][1] = 65;
a[1][2] = 71;
- 按行分段赋值
int a[2][3]={ {80,75,92}, {61,65,71}};
- 按行连续赋值
int a[2][3]={ 80,75,92,61,65,71};

其它写法
完全初始化,可以省略第一维的长度
int a[][3]={{1,2,3},{4,5,6}};
int a[][3]={1,2,3,4,5,6};
部分初始化,可以省略第一维的长度
为初始化的部分默认为0
int a[][3]={{1},{4,5}};
int a[][3]={1,2,3,4};
```

指定元素的初始化
未初始化的部分默认为0
int a[2][3]={[1][2]=10};
int a[2][3]={[1]={1,2,3}}
```
4.二维数组的遍历
二维数组a[3][4],可分解为三个一维数组,其数组名分别为:
```
a[0]
a[1]
a[2]
```
4这三个一维数组都有4个元素,例如:一维数组a[0]的元素为a[0][0],a[0][1],a[0][2],a[0][3]。必须强调的是,a[0],a[1],a[2]不能当作下标变量使用,它们是数组名,不是一个单纯的下标变量
4所以遍历二维数组无非就是先取出二维数组中得一维数组, 然后再从一维数组中取出每个元素的值

示例
charcs[2][3] = {
        {'a', 'b', 'c'},
        {'d', 'e', 'f'}
    };
printf("%c", cs[0][0]);// 第一个[0]取出一维数组, 第二个[0]取出一维数组中对应的元素

charcs[2][3] = {
        {'a', 'b', 'c'},
        {'d', 'e', 'f'}
    };
    for (inti = 0; i< 2; i++) { // 外循环取出一维数组
        // i
        for (int j = 0; j < 3; j++) {// 内循环取出一维数组的每个元素
printf("%c", cs[i][j]);
        }
printf("\n");
    }

5.二维数组的存储
- 存储方式:
1)计算机会给二维数组分配一块连续的存储空间
2)数组名代表数组的首地址,从首地址位置,依次存入第1行、第2行、.....
3)每一行存储方式,从行首地址还是,依次存储行的第1个元素、第2个元素、第3个元素......
4)每个元素占用相同的字节数(取决于数组类型)
5)并且数组中元素之间的地址是连续。
6.二维数组的元素作为函数参数
- 二维数组的元素就相当于变量,作为函数参数与变量相同

```
void test(char c);
int main(intargc, const char * argv[]) {
charcs[2][3] =
    {
        {'l', 'u', 'c'},
        {'l', 'k', 'm'}
    };
printf("cs[0][0] = %c\n", cs[0][0]);
test(cs[0][0]);
printf("cs[0][0] = %c\n", cs[0][0]);
return 0;
}
void test(char c)
{
c = 'w';
printf("我被执行了\n");
}

输出结果:
cs[0][0] = l
我被执行了
cs[0][0] = l





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2