gpt4 book ai didi

c - 单个 malloc 调用中的二维数组

转载 作者:行者123 更新时间:2023-12-02 07:06:36 25 4
gpt4 key购买 nike

int **arrayPtr; 
arrayPtr = malloc(sizeof(int) * rows *cols + sizeof(int *) * rows);

在上面的代码中,我们尝试在单个 malloc 调用中分配一个二维数组。malloc 获取一定数量的字节并为那么多字节分配内存,但是在上面的例子中,malloc 怎么知道首先它必须分配一个指针数组,每个指针指向一个一维数组?

malloc 在这种特殊情况下如何在内部工作?

最佳答案

二维数组与指向数组的指针数组不同。

int **arrayPtr 没有定义二维数组。二维数组如下所示:

整数数组[2][3]

指向该数组第一个元素的指针如下所示:

int (*array)[3]

你可以指向一 block 内存:

int (*array)[3] = malloc(sizeof(int)*5*3);


注意它是如何编入索引的:

  • array[x] 将扩展为 *(array+x),因此“x 个 3 整数数组向前”。
  • array[x][y] 将扩展为 *( *(array+x) + y),因此“然后 y 整数转发”。

这里没有直接的指针数组,只有一个连续的内存块。

如果你有一个数组数组(与 2D 数组不同,通常使用 int** ptr 和一系列每行 mallocs 完成),它会像:

  • ptr[x] 会扩展为 *(array+x),所以“x pointers forward”
  • ptr[x][y] 将扩展为 *( *(array+x) + y) = "y ints forward"。

注意区别。两者都使用 [x][y] 进行索引,但它们在内存中以不同的方式表示,并且索引以不同的方式进行。

关于c - 单个 malloc 调用中的二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10953787/

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