栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C/C++中动态申请二维数组

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C/C++中动态申请二维数组

C/C++中动态申请二维数组 C语言动态申请二维数组

在C语言中,数组的大小必须在编译期就作为一个常数确定下来。如果提前不知道数组的大小,那必须使用malloc函数来进行动态申请。

使用malloc/free函数来动态申请二维数组
  • 示例代码如下:
#include 
#include 

int main(int argc, char *argv[])
{
    int width = 3;
    int height = 3;

    int **arr = (int **)malloc(sizeof(int*)*width); // 行

    for(int i = 0; i < width; ++i)
    {
        arr[i] = (int *)malloc(sizeof(int)*height);  // 列
    }

    for(int i = 0; i < width; ++i)
    {
        for (int j = 0; j < height; j++)
        {
            arr[i][j] = i+j;
        }
    }

    for(int i = 0; i < width; ++i)
    {
        for (int j = 0; j < height; j++)
        {
            printf("%dt",arr[i][j]);
        }
        printf("n");
    }

    for(int i = 0; i < width; ++i)
    {
        free(arr[i]);
    }
    free(arr);
    arr = NULL;  // 指针置空
    return 0;
}

实际上,在C语言中只有一维数组,并没有多维数组,实现二维数组只不过在一维数组存储的元素上又存储了一个一维数组而已。所以代码中就很好理解了。首先定义一个指向指针的指针,然后使用malloc来进行内存分配,然后再对指针指向的指针使用malloc来进行内存分配,这样就可以模拟出一个二维数组了。

C++动态申请二维数组 1. 使用new/delete来动态申请二维数组
  • 示例代码:
#include 

int main(int argc, char *argv[])
{
    int width = 3;
    int height = 3;

    int **arr = new int*[width]; // 行

    for(int i = 0; i < width; ++i)
    {
        arr[i] = new int[height];  // 列
    }

    for(int i = 0; i < width; ++i)
    {
        for (int j = 0; j < height; j++)
        {
            arr[i][j] = i+j;
        }
    }

    for(int i = 0; i < width; ++i)
    {
        for (int j = 0; j < height; j++)
        {
            printf("%dt",arr[i][j]);
        }
        printf("n");
    }

    for(int i = 0; i < width; ++i)
    {
        delete[] arr[i];
    }
    delete[] arr;
    arr = nullptr;
    return 0;
}

new/delete实际上在底层也是调用malloc和free函数来实现的。可以参考C语言的理解。

2. 使用vector来动态申请二维数组
  • 示例代码:
#include 
#include 

int main(int argc, char *argv[])
{
    int width = 3;
    int height = 3;
    std::vector> arr(width,std::vector(height));
    
    for(int i = 0; i < width; ++i)
    {
        for (int j = 0; j < height; j++)
        {
            arr[i][j] = i+j;
        }
    }

    for(int i = 0; i < width; ++i)
    {
        for (int j = 0; j < height; j++)
        {
            printf("%dt",arr[i][j]);
        }
        printf("n");
    }

    return 0;
}

在vector容器中可以看到arr存储的元素是一个vector容器,这个跟数组存储的原理类似。在arr的构造函数时初始化arr存储了width个元素,而元素中的vector容器又存储了height个int元素。这样就可以模拟实现一个二维数组了。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/311958.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号