通过赋初值定义二维数组的大小
第一种:
例如:int a[][3] = {{1, 2, 3}, {4, 5}, {6}, {8}};
注意:
对于二维数组,省略只能省略第一个方括号中的常量表达式
如上的初赋值语句等同于:
int a[4][3] = {{1, 2, 3}, {4, 5}, {6}, {8}};
第二种:int = c[][3] = {1, 2, 3, 4, 5};
要计算第一个空的方括号中的值x:
当花括号对中的个数能整除第二维的常量表达式时,整数的结果就是第一维的大小;否则,第一维的大小等于所得的结果加1。
(即5/3 = 1 ……2, x = 1 +1 =2)
二维数组和指针
例如:int *p, a[3][4];
//定义p为指针变量,a是含有12个元素的一维数组
二维数组实际是一个一维数组,而每一个元素又是一个一维数组。
如上述a,有三个元素a[0],a[1],a[2];而每个元素又是由四个整数元素组成的一维数组。
通过a[0][0],a[0][1]引用,可以把a[0]看做一个整体,当做一个数组名。
a[0]就是代表a[0][0]的地址。
p = a[0]是合法的 p = a[0]+1 相当于&a[0][1]
从基类型来看,a为具有4个整型元素的数组类型。
注意:p = a; //非法 p基类型只有4个字节,a基类型有4*4个字节
二维数组取地址
有变量i和j,它们的取值范围为0 <= I < 3 、0 <= j < 4
那么a[i][j]的地址可以用以下五种表达形式:
(1)&a[i][j]
(2)a[i]+j
(3)*(a+i)+j
(4)&a[0][0]+4*i+j
(5)a[0]+4*i+j