在C语言中,只存在“一维数组”,这是对于C编译器而言。在C语言的语法规则中,毋庸置疑,是可以使用多维数组的。
1.一维数组的遍历:
可以定义如下一维数组并初始化:
int arr[10]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a};
我们可以使用数组名(arr)和下标(0-9)来引用数组中的元素:比如,arr[0]和arr[1]就表示内存值0x01和0x02。实际上0[arr]和1[arr]同样表示内存值0x01和0x02,尽管这种引用数组元素的方式比较少见,却是合法的。
原 因在于C编译器在处理数组元素时,是通过指针的方式来引用,即arr[0]被编译器转换为*(arr+0),arr[1]被转换为*(arr+1);同样 的处理方式,0[arr]和1[arr]被编译器转换为*(0+arr)和*(1+arr).显然,因为加法交换律的保证,*(arr+0)与* (0+arr)是相同的表达式,而*(arr+1)与*(1+arr)也是相同的表达式。
于是,遍历一维数组有可以如下2种方式:
方式(1):
int cnt;
int arr[10]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a};
for(cnt=0;cnt<10;cnt++)
{
printf("%d\n",arr[cnt]);
}
方式(2):
int *parr=NULL;
int arr[10]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a};
for(parr=arr;parr<arr+10;parr++)
{
printf("%d\n",*parr);
}
依照上述的方法,可以写出遍历多维数组的方法,以二维数组,三维数组,四维数组为例,来演示具体如何操作。
2.二维数组的遍历
可以定义如下二维数组并初始化:
int arr[3][4]={ 0x01,0x02,0x03,0x04,
0x05,0x06,0x07,0x08,
0x09,0x0a,0x0b,0x0c
};
方式(1):
int row,col;
for(row=0;row<3;row++)
for(col=0;col<4;col++)
{
printf("%d\n",arr[row][col]);
}
方式(2):
int*p1=NULL;
int*p2[4]=NULL;
for(p2=arr[0];p2<arr[0]+4;p2++)
for(p1=*p2;p1<*p2+3;p1++)
{
printf("%d\n",*p1);
}