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 <stdio.h>
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语言二维数组的四种遍历方式,创作不易,给个赞吧

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值