1)一维数组中任何一个元素的a[i]的地址表示为&a[i]=a+i*sizeof(元素类型)
ps:其中sizeof(元素类型)是计算一个元素占用存储空间的字节数
C语言不对越界进行检查,越界访问会产生垃圾数据
2)二维数组:按行进行存储(一行存完了再存下一行)
可看成特殊的一维数组(降维)
eg: float a[3][4]
a[0]-->a[0][0] a[0][1] a[0][2] a[0][3]
a[1]-->a[1][0] a[1][1] a[1][2] a[1][3]
a[2]-->a[2][0] a[2][1] a[2][2] a[2][3]
a[i][j] 的地址可以这样得到:
&a[i][j]=a[i]+j*sizeof(a[0][0])=4
=a+i*sizeof(a[0])+j*sizeof(a[0][0])
=a+i*(4*4)+j*4
3)多维数组:在存储时第一维下标变化最快,右下标变化最快
五、数组的初始化
1、C语言中只有静态(static)数组存储类和外部(extern)数组存储类数组才能初始化(现在很多编译系统已取消这种限制)
2、且放在一对花括号中,按顺序依次赋值
3、也可部分初始化,没有初始化的,自动赋值0
4、对全部赋值的数组,可以不指定长度
5、二维数组,可以对一维长度不指定,二维必须指定(可以分行赋值,每行放在一个花括号中,也可全部放在一个花括号中,按顺序赋值)
六、数组作为函数参数
1、函数参数的传递方式:值传递和地址传递(地址传递,对形参的修改实质就是对实参的修改)
ps:a、形参数组名是变量,实参数组名是常量
b、形参和实参应类型一致
c、形参数组可指定大小,也可不指定(一般不指定)
d、二维数组,一维长度可不指定,但二维长度必须指定
f、若在形参数组定义中没有指定元素个数,可以借助另一个形参完成
例题:平台问题。很经典的程序!