关于二维数组分配(c/c++)

二维数组在栈上的分配只需要定义声明就可以了,那么如果是动态分配在堆上呢?

使用二级指针(指针的指针):

    int **p = new int *[ROWS];
    for(int i=0;i<ROWS;i++)   
          p[i] = new int[COLUMNS];

使用指针数组:

    char* p[ROWS];
    for (int i = 0; i<ROWS; i++)
    {
        p[i] = new char[COLUMNS];
    }

类似指针数组,先定义一维,再定义另一维

    typedef char rowData[COLUMNS];
    rowData* p = new rowData[ROWS];

    for (int i = 0; i < ROWS;i++) 
    {
        std::snprintf(p5[i],sizeof(p5[i]),"%s","rowData Str...");
    }

    for (int i = 0; i < 20; i++)
    {
        std::printf("%s\n", p5[i]);
    }

或者这样 (数组指针)

    const int column = 3;
    int row = 2;
    int(*xx1)[column] = new int[row][column];

    for (int i = 0; i < row; i++)
    {
        for (int j = 0; j < column; j++)
        {
            xx1[i][j] = (i + 1) * 10 + j;
            std::printf("%d,", xx1[i][j]);
        }
        std::printf("\n");
    }

总的来说,除了二级指针方式之外,其余方式都要先固定其中一个维度,也就是按静态分配,在栈上…

C只支持“数组的数组”这一概念,如果你把它单纯的当作”多维数组”来理解,估计会出问题…

具体可以看下《C专家编程》,里边关于数组和指针的章节,第九、十章,做了很好的描述

数组指针和函数形参的转化可参考下图^_^

数组和指针参数是如何被编译器修改的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值