一、二维数组的定义
二维数组的定义格式为:
类型说明符 数组名[常量表达式1][常量表达式2];
其中常量表达式1表示第一维下标的长度,说明数组的行数,常量表达式2 表示第二维下标的长度,说明数组的列数。
例如:
int a[3][4]
该声明定义了一个3行4列的二维数组,数组名为a,该数组的下标变量共有3×4=12个,如图5-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]
图5-4 二维数组
二维数组在概念上是二维的,其下标在两个方向上变化,即行和列。从图中可以看出,二维数组的第一维决定行数,第二维决定列数。在内存中是逐行存放,即放完一行之后顺次放入第二行,如图所示。
a[0][0]a[0][1]a[0][2]a[0][3]a[1][0]a[1][1] … a[2][3]
二维数组的存储
数组a的定义声明为int类型,该类型占两个字节的内存空间,所以数组共占空间:12*2=24个字节。
二、二维数组的初始化
同一维数组相同,二维数组也可以进行初始化操作,即在数组定义的同时给各下标变量赋以初值。下面是几种不同的初始化方式:
1、对所有数组元素初始化:
int a[3][4]={{80,75,92,77},{61,65,86,71},{59,63,70,90}}
赋值情况如图5-6所示。
80759277
61658671
59637090
图5-6 二维数组的赋值
等价于:
int a[3][4]={80,75,92,77,61,65,86,71,59,63,70,90}
当为所有元素初始化时会自动按行赋值,因此可以省略区分行的{}。
以上两种形式还可以进行简化,当所有元素有初值时可以省略第一维,即行号:
int a[ ][4]={80,75,92,77,61,65,86,71,59,63,70,90}
默认值为3,取所有可能数据的最小数。
2、只对部分元素赋初值,未赋初值的元素自动取0值。
例如:
int a[3][4]={{10},{20},{30}}
是对每一行的第一列元素赋值,未赋值的元素取0值。 赋值后各元素的值为:
10 0 0 0
20 0 0 0
30 0 0 0
而若有 int a[3][4]={{10}{0,20},{0,0,30}}
赋值后的元素值为:
10 0 0 0
0 20 0 0
0 0 30 0
以上两种形式的行数已经确定,这种情况下也可以省略第一维:
int a[][4]={{10},{20},{30}}
int a[][4]={{10}{0,20},{0,0,30}}
#define f(a,b) a+bmain()
{
/*主函数自己写吧!!!*/
…………
}
fun(int n)
{
int i,sum=0
for(i=1i<=ni++)
sum=f(sum,i)
return sum
}