二维数组
1 数组的存储方式
- 按行存储 先存第0行 再存第1行… C语言中就是按行存储
- 按列存储 先存第0列 再存第1列…
2 二维数组的定义
int a[3][3];
这就定义了一个二位数组,此时里面没有数据,或者说时脏数据
3 二维数组初始化
注意 :在定义的时候也可以初始化
int a[3][3]={1,2,3};
分段赋值
int a[5][3]={ {80,75,92}, {61,65,71}, {59,63,70}, {85,87,90}, {76,77,85} };
连续赋值
int a[5][3]={80, 75, 92, 61, 65, 71, 59, 63, 70, 85, 87, 90, 76, 77, 85};
考点
- 二维数组无论时在定义时候还是在初始化的时候都必须写上列下标,告诉程序,这个二维数组有几列。
- 连续赋值常常不写行的下标,要通过后面的总个数除以列下标自己算出来
二维数组的0赋值
1)可以只对部分元素赋值,未赋值的元素自动取“零”值。例如:
int a[3][3] = {{1}, {2}, {3}};
1 0 0
2 0 0
3 0 0
2) 分段赋值也一样
int a[3][3] = {0, 1, 0, 0, 2, 3};
0 1 0
0 2 3
0 0 0
二维数组作为参数的传递
int a[3][3]={0};//全部置0
//调用函数 fun
fun(a);
//fun函数的定义
void fun(int a[][3]){
}
那是因为数组和指针有许多相似的地方,我在开始是学习的时候就把他们看成一类,在学习的时候发现挺管用。由于数组在传递的时候本质上就时传递一个指针,并不存在传递一个实参int a,在函数中把int a修改了,返回的时候无效,只有通过指针传递才可以达到这样的目的。以上这种情况对于数组都是不存在的,数组一传递就是指针,那么问题就来了,传递一个二维数组函数时不知道这个数据时几行几列,所有在定义函数时候需要写成数据指针