C语言二维数组的四种遍历方式

二维数组的四种遍历方式:

a[i][j] *(a[i]+j) *(*(a+i)+j) *(&a[0][0]+i*n+j)

1.a[i][j] : 这种方法是最基本的方式。

2.*(a[i]+j) :(a[i]+j)是下标为(i,j)的地址,通过‘ * ’运算就取得下标为(i,j)的元素值。

3.*(*(a+i)+j) :这种方式可能是大家最迷惑的方式,其实并不难理解,下面我们来详细讲解:

假如有一个二维数组: int a[3][4] = {{1, 3, 5, 7}, {9, 11, 13, 15}, {17, 19, 21, 23}};

其中,a 是二维数组名。a 数组包含 3 行,即 3 个行元素:a[0],a[1],a[2]。

每个行元素都可以看成含有 4 个元素的一维数组。而且 C 语言规定,a[0]、a[1]、a[2]分别是这三个一维数组的数组名。

如下所示:

而在C语言遍历一维数组的四种方式(点击转到该文章)一文中a[i]与*(a+i)是等价的,也就是说 a[i]=*(a+i)

所以第三种方式就等价于第二种方式了,就能成功进行二维数组的遍历了。

4.*(&a[0][0]+i*n+j) :

&a[0][0]是二维数组的首地址,i是行数,n是每行元素个数,故&a[0][0]+i*n+j就是下标为(i,j)的地址,通过‘ * ’运算就取得下标为(i,j)的元素值。

5.若有指针p指向该数组的开始位置,还可以用*(p+i*n+j) (此方式大家自行测试)。

c语言测试代码:

/*Function:二维数组的四种遍历方式:a[i][j],*(a[i]+j),*(*(a+i)+j),*(&a[0][0]+i*n+j) */

#include

void main(){

int i,j;

int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};

printf("方式一:a[i][j]\n"); //方式一

for(i=0;i<3;i++){

for(j=0;j<3;j++){

printf("%d",a[i][j]);

}

}

printf("\n方式二:*(a[i]+j)\n"); //方式二

for(i=0;i<3;i++){

for(j=0;j<3;j++){

printf("%d",*(a[i]+j));

}

}

printf("\n方式三:*(*(a+i)+j)\n"); //方式三

for(i=0;i<3;i++){

for(j=0;j<3;j++){

printf("%d",*(*(a+i)+j));

}

}

printf("\n方式四:*(&a[0][0]+i*3+j)\n"); //方式四

for(i=0;i<3;i++){

for(j=0;j<3;j++){

printf("%d",*(&a[0][0]+i*3+j));

}

}

printf("\n");

}

执行结果:

以上就是C语言二维数组的四种遍历方式,创作不易,给个赞吧。

Copyright © 2022 世界杯吉祥物_世界杯日本队 - ctpapi.com All Rights Reserved.