n维数组

一维数组

一维数组是在存储空间中开辟一段连续存储地址的存储空间用来存储数据,代码如下

#include<iostream>
using namespace std;
int main ()
{
        //一维数组
        int array[5] = { 1 ,2 , 3 ,4 ,5 };
        int (*p)[5] = &array;           //数组指针:**指向整个数组**
        cout << int(array) <<endl;              //数组名字指向第一个元素空间
        cout << int(p) << endl;         //打印数组指针
        cout << int(array + 1) << endl;         //第一个元素空间的地址+1
        cout << int(p +1) << endl;              //整个数组空间+1
        cout << *array << endl;         //打印第一个整数
        cout << *(array + 1) << endl;           //打印第二个整数
        cout << **(p + 1) << endl;             //打印**越界**之后的第一个数
}

array指向一维数组中第一个整形数据,&array指向整个数组结构,示意图如下
在这里插入图片描述

结果如下

在这里插入图片描述


二维数组

二维数组就是二维数组中有很多一维数组.比如array[3][2]就是这个array[3][2]中有3个一维数组,一维数组中有两个数据元素.array是第一个一维数组的指针,&array是指向整个数组的指针.

#include<iostream>
using namespace std;
int main ()
{
        int array[3][2] = { {10,11} , {12 ,13},{14,15}};
        int (*p)[2] = array;           //一维数组指针
        int(*q)[3][2] = &array;                 //二维数组指针
        for(int i = 0 ; i < 3 ; i ++)
                for(int j = 0 ; j < 2 ; j++)
                cout << "array" << '[' << i << ']' << '[' << j << ']' << '=' << array[i][j] << " ";		//打印二维数组
        cout << '\n';

        for(int i = 0 ; i < 3 ; i++)
                cout << array + i << endl;              //从第一个到第三个一维数组指针

        for(int i = 0 ; i < 3  ;  i++)
                cout << p + i << endl;          //同上

        cout << &array + 1 <<  endl ;           //整个二维数组加一
        cout << q + 1 << endl;          //同上
        return 0;
}

运行结果如下

在这里插入图片描述

在内存中示意图如下

在这里插入图片描述

可以把二维数组想象成平面,这个平面有很多一维数组组成,数组名array指向第一个一维数组,&array指向整个二维数组.

在这里插入图片描述


三维数组

三维数组就是其中含有很多二维数组的数组,比如array[3][2][2],就是含有3个二维数组的数组,其中二维数组是含有两个一维数组的数组,这个一维数组含有两个两个整型数据.代码如下

#include<iostream>
using namespace std;
int main ()
{
        int array[3][2][2] =
        {
                {
                        {5,6},
                        {7,8},
                },
                {
                        {9,10},
                        {11,12},
                },
                {
                        {13,14},
                        {15,16},
                }
        };

        int (*p)[2][2] = array;         //p指向三维数组中第一个二维数组
        int (*q)[3][2][2] = &array;             //q指向整个三维数组

        //打印三维数组
        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 << array[i][j][k] << endl;
                        }
        cout << &array[0][0][0]  << endl ;              //第一个三维数组的地址
        cout << p + 1 << endl ;           // 三维数组中第一个二维数组加一
        cout << array + 1  << endl;          //同上
        cout << q + 1 << endl;          //整个三维数组+1
        return 0;
}

三维数组数组名是指向第一个二维数组的二维数组指针,&array是指向整个三维数组的指针,运行结果如下:

在这里插入图片描述

在内存空间的位置如下:

在这里插入图片描述

可以将一个三维数组想象成立体图形,以上的空间想象图可以写成3个平面放在一起,实际上是没有这几条直线的,但是为了更有立体感,只能画成这样了…

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值