一维数组 简称数组,形式为a[i],在内存中占用i个大小相等的连续空间,其中数组名a为该空间的首地址,类似于&a[0],数组名不是指针,但可以转化成指针使用。 例如: char a[3];假设数组的首地址为0x0, 则&a[2]则为0x2;
二维数组 形式为a[i][j],其中i表示行数,j表示列数,在内存中占用i * j个大小相等的连续空间,其中数组名a为该空间的首地址,类似于&a[0][0],a[1]为第1行的首地址,类似于&a[1][0]。 例如: char a[4][3];假设数组空间的首地址为0, 则,&a[2][2]则为 0x8(2 * 3 + 2)
注意 二维数组作为形参传递时,不同于一维数组,不能直接作为二维指针传递,形参格式如下,后面数组的列数应和二维数组数组一致,不能忽略,三维数组也是如此。
#include <stdio.h> void print_array(int *array, int len) { int i = 0; for ( ; i < len; i++) { printf("%d ",array[i]); } putchar('\n'); } void func(int (*array)[10]) //void func(int array[][10]) { print_array(array[0], 10); print_array(array[1], 10); print_array(array[2], 10); print_array(array[3], 10); print_array(array[4], 10); } int main() { int array[5][10] = { {0,1,2,3,4,5,6,7,8,9}, {10,11,12,13,14,15,16,17,18,19}, {20,21,22,23,24,25,26,27,28,29}, {30,31,32,33,34,35,36,37,38,39}, {40,41,42,43,44,45,46,47,48,49} }; func(array); return 0; }三维数组 形式为a[i][i][k],其中i表示层数,j表示行数,k表示列数, 在内存中占用i * j * k个大小相等的连续空间(可以理解为有一本书名为a,这本书有i页,每页有j行,每行有k个字)。其中数组名a为该空间的首地址,类似于&a[0][0][0],a[1]为第1层的首地址,类似于&a[1][0], a[1][1]为第一行的首地址,类似于&a[1][1][0]。 例如: char a[5][4][3];假设数组空间的首地址为0, 则 &a[4][3][2]则为 0x59(4 * 4 * 3 + 3 * 3 + 2)