首页 > 解决方案 > C++ 程序如何为数组分配内存?(不是动态的)

问题描述

例如,当我们创建一个数组时int arr[2][4];,它的大小变为 2x4x4 = 32,但如果我们动态执行此操作,它的大小将超过 32。

例如,我写了这段代码:

#include <iostream>
#include <stdlib.h>

using namespace std;
// arr[4][2]
int main(){
    int **arr;
    arr = (int**)malloc(4*sizeof(int*));
    
    int i;
    for(i=0;i<4;i++){
        *(arr+i) = (int*)malloc(2*sizeof(int));
    }
    arr[3][1] = 4;
    cout << arr[3][1];


    return 0;
}

分配了 8 + 4x8 + 4x2x4 = 72 个字节。这就是为什么我认为该程序正在做不同的事情,我想知道它是如何做到的。

标签: c++

解决方案


您在这里所做的并不完全是一个 2D 数组,尽管它在语法上表现得像一个数组。相反,您拥有的是一个指针数组,每个指针都指向一个int.

如果你想分配一个实际的二维数组,你可以这样做:

int (*arr)[2] = malloc(4 * sizeof *arr);

推荐阅读