二维数组
二维数组定义的形式:
类型 数组名[常量表达式1][常量表达式2]
例: int a[3][4],表示有3行4列分别为
a[0][0],a[0][1],a[0][2],a[0][3]
a[1][0],a[1][1],a[1][2],a[1][3]
a[2][0],a[2][1],a[2][2],a[2][3]
初始化
方法一:
int a[3][4] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};
方法二:
int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
未赋初值的元素自动取0值。
例:int a[3][4] = {{1}, {2}, {3}};
1,0,0,0
2,0,0,0
3,0,0,0
作为参数传递
1 | void foo(int (*p)[4], int n) //p为数组指针,指向二维数组 |
大小计算
例:a[3][4]
获得数组所占内存大小:sizeof(a),32位机上为48字节
获得数组元素的个数:sizeof(a) / sizeof(int)
取地址和步长
先看一段代码:
1 | int main() |
运行结果:
分析:
b,&b[0][0],&b[0],&b输出的地址一样,但步长不同。
b+1和&b[0]+1都是第二行首元素的地址,所以步长为一行4*sizeof(int)=16个字节
&b[0][0]+1为第一行第二个元素的地址,偏移一个元素,步长为4个字节
&b表示为整个数组的地址,步长为整个数组12*sizeof(int)个字节。