C语言 通过指针访问一维数组,二维数组,三维数组。

/**
通过指针来访问一维数组,二维数组,多维数组
*/

#include<stdio.h>
const int COLS=3;
const int COUNT=4;
//通过一级指针,计算偏移量来遍历一维数组
void printSingleDimensionalArray(int *data,int data_len);
//通过一级指针,计算偏移量来遍历二维数组:
void printDoubleDimensionalArray(int *array,int rows,int cols);
//通过一级指针,计算偏移量来遍历三维数组:
void printThreeDimensionalArray(int *array_3,int rows,int cols,int count);
//使用指向二维数组的指针来遍历三维数组
void printThreeDimensionalArray2(int (*p)[COLS][COUNT],int rows);

void main()
{
    int data[]={1,2,3,4,5,6,7,8,9};
    int data_len=sizeof(data)/sizeof(data[0]);
    printf("data[6]=%d\n",*(data+6));//7
    printf("一维数组data:\n");
    printSingleDimensionalArray(data,data_len);
    int array[2][3]={{1,2,3},{4,5,6}};
    printf("二维数组array:\n");
    printDoubleDimensionalArray(array,2,3);
    int count=0;
    int array_3[2][3][4];
    int i,j,k;
    for(i=0;i<2;i++)
    {
        for(j=0;j<3;j++)
        {
            for(k=0;k<4;k++)
            {

                array_3[i][j][k]=count++;
            }

        }
    }
    printf("三维数组array_3:\n");
    printThreeDimensionalArray(array_3,2,3,4);
    //三维数组的初始化
    int array_33[2][3][4]=
    {
        {
            {1,2,3,4},
            {5,6,7,8},
            {9,10,11,12},
        },
        {
            {13,14,15,16},
            {17,18,19,20},
            {21,22,23,24},
        }
    };
    printf("三维数组array_33:\n");
    printThreeDimensionalArray(array_33,2,3,4);
    printf("三维数组array_33:\n");
    printThreeDimensionalArray2(array_33,2);
}
//通过一级指针,计算偏移量来遍历一维数组
void printSingleDimensionalArray(int *data,int data_len)
{
    int i;
    for(i=0;i<data_len;i++)
        printf("%4d",*(data+i));//7
    printf("\n");
}
//通过一级指针,计算偏移量来遍历二维数组:
void printDoubleDimensionalArray(int *array,int rows,int cols)
{
    int i,j;
    for(i=0;i<rows;i++)
    {
        for(j=0;j<cols;j++)
        {//通过一位指针,计算偏移量来遍历二维数组:
            printf("%4d",*(array+i*cols+j));
        }
        printf("\n");
    }
}
//通过一级指针,计算偏移量来遍历三维数组:
void printThreeDimensionalArray(int *array_3,int rows,int cols,int count)
{
    int i,j,k;
    for(i=0;i<rows;i++)
    {
        printf("{\n");
        for(j=0;j<cols;j++)
        {
            for(k=0;k<count;k++)
            {

//                array[i][j][k]=count++;
//                printf("%4d",array_3[i][j][k]);
                printf("%4d",*(array_3+i*3*4+j*4+k));
            }
            printf("\n");
        }
        printf("}\n");
    }
}
//使用指向二维数组的指针来遍历三维数组
void printThreeDimensionalArray2(int (*p)[COLS][COUNT],int rows)
{
    int i,j,k;
    for(i=0;i<rows;i++)
    {
        printf("{\n");
        for(j=0;j<COLS;j++)
        {
            for(k=0;k<COUNT;k++)
            {

//                array[i][j][k]=count++;
                printf("%4d",p[i][j][k]);
//                printf("%4d",*(array_3+i*3*4+j*4+k));
            }
            printf("\n");
        }
        printf("}\n");
    }
}

结果:

data[6]=7
一维数组data:
   1   2   3   4   5   6   7   8   9
二维数组array:
   1   2   3
   4   5   6
三维数组array_3:
{
   0   1   2   3
   4   5   6   7
   8   9  10  11
}
{
  12  13  14  15
  16  17  18  19
  20  21  22  23
}
三维数组array_33:
{
   1   2   3   4
   5   6   7   8
   9  10  11  12
}
{
  13  14  15  16
  17  18  19  20
  21  22  23  24
}
三维数组array_33:
{
   1   2   3   4
   5   6   7   8
   9  10  11  12
}
{
  13  14  15  16
  17  18  19  20
  21  22  23  24
}

Process returned 2 (0x2)   execution time : 0.312 s
Press any key to continue.


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值