c++ 二维数组_C|二维、三维数组的多种遍历方法

对于数组,与指针变量总有千丝万缕的关系。

    int arr[3][4] = {        1,2,3,4,        5,6,7,8,        9,10,11,12};    int base;   // 以下三个地址值相同,但类型不同,尺寸不一    printf("%p",&arr);                  // 0012FF18    printf("%p",arr);                   // 0012FF18    printf("%p",arr[0]);                // 0012FF18    printf("%p",&arr[0][0]);            // 0012FF18    //取值需要不同级别的解引用    printf("%d",**arr);                 // 1    printf("%d",*arr[0]);               // 1    printf("%d",arr[0][0]);             // 1    printf("%p",base=(int)&arr[0][0]);  // 0012FF18                                          // +1的偏移值是其类型尺寸的偏移    printf("%d",(int)(&arr+1)-base);    // 48  sizeof(int)*4*3    printf("%d",(int)(arr+1)-base);     // 16  sizeof(int)*4    printf("%d",(int)(arr[0]+1)-base);  // 4   sizeof(int)    printf("%d",(int)(&arr[0][0])-base);// 0

一级指针,可以用一维数组名赋值。

而对于多维数组,与多级指针就不存在等价关系了。

对于n维数组,可以直接用一级指针去处理,因为n维数组在内存中也是线性存储的。

另外,n维数组,可以理解为其元素是n-1数组,这样,n维数组就可以用n-1维数组指针来表示。也可以用指针数组(其指针指向一个n-1维数组)来表示。所以从这个意义上说,这是一种降维的处理方式,对于符号“*”与“[]”,不是很严格地可以理解为有一定的等价性:

#include using namespace std;int main(){    int arr[3][4] = {        1,2,3,4,        5,6,7,8,        9,10,11,12};      int i,j;    cout<< "1 二维数组下标遍历"<

数组指针也可以指向一维数组,但写法细节略有区别:

    int a[4] = {11,22,33,44};    cout<
ef351742258eb73e9f20ff408b1949ef.png

三维数组的遍历:

#include using namespace std;int main(){    int arr[2][3][4] = {0};    int* p = (int*)arr;    int i,j,k;    for(i = 0; i<2*3*4; i++)        *p++ = i+1;    p= arr[0][0]; // p = &arr[0][0][0];    for(i=0;i<2;i++)    {        for(j=0;j<3;j++)        {            for(k=0;k<4;k++)  // 以下5种方式等价                //cout<< arr[i][j][k] <
5f141839cc03444978f5ef2002a43a35.png

-End-

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值