如果我像这样分配一个二维数组整数a[N][N];它将分配一个连续的内存块。
但如果我尝试像这样动态地执行此操作:
int **a = malloc(rows * sizeof(int*));
for(int i = 0; i < rows; i++)
a[i] = malloc(cols * sizeof(int));
这会在行中的元素之间保持单位步长,但行之间可能不是这种情况。
一种解决方案是从 2D 转换为 1D,除此之外,还有其他方法吗?
如果您的数组维度在编译时已知:
#define ROWS ...
#define COLS ...
int (*arr)[COLS] = malloc(sizeof *arr * ROWS);
if (arr)
{
// do stuff with arr[i][j]
free(arr);
}
如果您的数组维度在编译时未知,并且您使用的是支持可变长度数组的 C99 编译器或 C2011 编译器:
size_t rows, cols;
// assign rows and cols
int (*arr)[cols] = malloc(sizeof *arr * rows);
if (arr)
{
// do stuff with arr[i][j]
free(arr);
}
如果您的数组维度在编译时未知,并且您是not使用支持变长数组的C99编译器或C2011编译器:
size_t rows, cols;
// assign rows and cols
int *arr = malloc(sizeof *arr * rows * cols);
{
// do stuff with arr[i * rows + j]
free(arr);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)