gpt4 book ai didi

c++ - 双指针可以用作二维数组吗

转载 作者:行者123 更新时间:2023-12-01 23:19:41 26 4
gpt4 key购买 nike

假设我有一个二维数组 - int Array[2][2];我知道我可以实现一个有 4 个元素的数组,每行有 2 个元素 [1 行构成一个数组]。我想知道 **Arr - 指向指针的指针是否可以用作二维数组。

最佳答案

注意:此答案仅与 C 标签相关。在 C++ 中,这是不同的,也是您很少(几乎从不)做的事情。

I want to know if **Arr - A pointer to a pointer can be used as a 2D array.

是的,它叫做锯齿状数组。你这样做:

int rows = 2;
int cols = 2;
int** arr = malloc(rows * sizeof *arr);
for (int i=0; i<rows; ++i)
{
arr[i] = malloc(cols * sizeof *arr[i]);
}

现在您可以访问,例如arr[1][0]

完成数组后,您需要释放它。这是您的 malloc 的“反向”操作。喜欢:

for (int i=0; i<rows; ++i)
{
free(arr[i]);
}
free(arr);

另一种方法是使用指向 cols int 数组的指针。喜欢

int (*arr)[cols] = malloc(rows * sizeof *arr);

... use arr, e.g. arr[1][0] = 42; ...

free(arr);

第二个代码的好处是它更简单(更少的代码,更少的 mallocfree 调用导致更好的性能)。

锯齿状数组适用于行中需要可变列数的情况。例如,如果某些行只需要 10 个整数而其他行需要 10.000 个整数,您可以通过仅分配特定行实际需要的列数(而不是始终为所有行分配 MAX 列数)来节省内存。此外,如果您需要在运行时更改列数(例如使用 realloc),这很好。

关于c++ - 双指针可以用作二维数组吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68251484/

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