gpt4 book ai didi

arrays - malloc 二维数组的另一种方法?

转载 作者:太空狗 更新时间:2023-10-29 15:05:57 28 4
gpt4 key购买 nike

我想使用 malloc 声明一个二维数组。在互联网上查找时,所有网站都告诉您声明一个 int ** 指针,然后使用 malloc 首先将各个指针分配给一维数组,然后再次使用 malloc 为各个 int 分配空间。我怀疑以这种方式声明的数组不会将其元素保存在连续的内存地址中。而以下方式仅使用一个 malloc 语句并动态分配一个二维数组,并且所有地址都按要求连续。那么下面的方法不应该是动态分配二维数组的正确方法吗?

#include <stdio.h>

int main(){
int (*p)[2] = malloc(3 * sizeof *p);
int i;
int j;

//All addresses printed here are contiguous
for(i=0; i<3; i++){
for(j=0; j<2; j++){
printf("%d\t", &p[i][j]);
}
printf("\n");
}
}

最佳答案

So shouldn't the following be the correct way to dynamically allocate a 2d array?

它应该,因为这种方法等同于声明一个多维度的“静态分配”数组。

这样做的原因是,通过这种方式,您可以获得一个连续的内存块,这很方便(您不能在指针到指针上使用 memset(),对吧?) ,你仍然可以让编译器为你做指针运算和数组下标计算(这也很方便)。

顺便说一下,如果你需要一个范围只在一个函数内的动态大小的数组,i. e.您不需要返回它,请考虑使用具有自动存储持续时间的 VLA(可变长度数组)。

关于arrays - malloc 二维数组的另一种方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17389009/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com