c/c++ 多维数组本质

数组的概念自然不必多说,根据维度不同,数组名的类型就不同。先从最简单的一维数组讲起:

1、一维数组

int array[3],此时定义了含有 3 个元素数组,此时 array 的类型 int*,即指针类型。

array 作为指针变量,指向数组的第一个元素 array[0] ,该表达式与 *array等价,同理数组的第二个元素array[1]与*(array+1)等价。

2、二维数组

int array[3][4],对于一维数组,曾经年少无知的我一度认为array也是 int*类型,其实不是,array其实是一维指针数组,int (*p)[4],array 的类型与p等价,p=array。使用以下代码初始化二维数组 array。

int num = 1;
for(int i=0; i<3; i++){
    for(int j=0; j<4; j++){
        array[i][j]=num++;
    }
}

// 初始化之后,array的内容如下
1 2 3 4 
5 6 7 8 
9 10 11 12

二维数组array 由 3 个一维数组组成,分别是 array[0],array[1],array[2],这 3 个元素保存在 array 指针数组里。

array[0] 为 array[0] 第 1 个元素的地址,1的地址

array[1] 为 array[1] 第 1 个元素的地址,5 的地址

array[2] 为 array[2] 第 1 个元素的地址,6 的地址

好像有点废话,不过array 本身可看作一个一维数组,它的元素为多个一维数组的首地址。

*array[0] = 1; 等价于 **array

*array[1] = 5 等价于 **(array+1)

*array[2] = 9 等价于 **(array+2)

3、三维数组

int array[3][2][2],array 包含 3 个 二维数组,每个二维数组都包含 2 个一维数组。说明 array 的类型为二维指针数组,它的每个元素指向一个二维数组。

使用以下代码初始化该三维数组:

    int id = 1;
    for(int i=0; i<3; i++){
        for(int j=0; j<2;j++){
            for(int k=0; k<2; k++){
                array[i][j][k] = id++;
            }
        }
    }
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 2; j++)
        {
            for (int k = 0; k < 2; k++)
            {
                cout<< array[i][j][k]<<" ";
            }
            cout<<endl;
        }
        cout<<endl;
    }
    // array 的内容如下
    1 2 
    3 4 

		5 6 
		7 8 

		9 10 
		11 12 

array[0] 指向 二维数组

1 2 
3 4 

*array[0][0] 指向 1 2

*(array[0][0]+1) 指向 1

*(array[0][0]+2) 指向 2

*array[0][1] 指向 3 4

*(array[0][1]+1) 指向 3

*(array[0][1]+2) 指向 4

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值