C++中如何正确的开辟一个动态的二维数组

如何定义一个动态的二维数组:


        如何定义一个动态的二级指针,看似每个有点C语言基础的人觉得自己都可以很容易完成,但要正确的完成并且说的明白其中道理不见得就那么多。

     *图解二维数组:

ps:指针数组:即用于存储指针的数组,也就是数组元素都是指针。

            int*a[4];  1.指针数组

                            2.表示指向数组a的指针

                            3.元素表示(*a)[i]

            数组指针:即指向数组的指针。

            int(*p)[n];

                            1.p是一个指针,指向一个整形的一维数组,这个一维数组的长度是n。

            如何将一个二维数组赋给一个指针:

             int a[9][10];//一个二维数组

             int (*p)[10];//定义一个数组指针,指向含10个元素的一维数组

             p=a;            //将该二维数组的首地址赋给p;也就是a[0]或a[0][0]

             p++;           //p++即p=p+1;也就是p跨过了a[0][ ]指向了a[1][ ]。)


两种定义二维数组的方式,访问数据的方式,优缺点

方法一:

    定义方式:

    int **p=new int*[10];

    for (int i=0;i<=10;++i)

           {

                  p[i]=new int[10];

            }

    访问数据的方式:直接通过a[i][j]访问第i行第j列的数据。

    优缺点:通过a[i][j]访问数据容易,但是new的次数太多,释放空间不容易。

方法二:

    定义方式:

     int *p=new int[10*10];(ps:这种事当成一维数组连续开辟的。)

     *图例:(看&p[9]和&p[10]等地址相差为4个字节,即它们是相连的,所以为一维数组)

     

     访问数据的方式:通过a[i*10+j]来访问第(i*10+j)个数据。

     优缺点:访问数据很方便,且new的次数少,释放空间容易,但是不便于理解。

    


评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值