关于C++在堆中建立二维数组的问提及二维数组的使用常识

本文详细解析了二维数组指针(int**a)与二维数组(int[][]b)的区别, 包括它们在参数传递、分配与回收方面的特性。通过对比两者在栈空间与堆空间的不同表现, 提供了在实际编程中正确使用二维数组指针的指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.int[][]和int **的区别:

相当明显,int[][]是连续的空间!而int**a是半连续的,即不同的行是不连续的,但是同一列是连续的

所以:在参数传递时候,二者不可互传,即使是[][]传**,因为int** 和a[][]虽然传的都是地址,但是一个在栈空间连续,另一个在堆空间半连续!

而且int a[][num]的数据类型是int(*)[num]类型的,所以,int[][]之间的传参,必须指定最后一维

二.二者的相同点:

都可以用来表示或者说存储二位数组,而且都可一用地址运算符:[][]访问

蛋疼的int[][]:

在用之前就必须指定它大小,因为空间连续分配

三.int **的分配与回收

    //分配
    int **b=new int*[3];
    for(int i=0;i<3;i++){
        b[i]=new int[5];
    }
    //回收:必须先回收低维度再回收高维度不然内存泄露
    for(int i=0;i<3;i++){
        delete[] b[i];
    }
    delete[] b;
    //补充说明:delete后面加[]代表回收整个数组,加不加[]与new那儿加不加一致



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值