有没有什么方法可以在 C(不是 C++,只是 C)中创建一个可变大小的双脚本数组?我知道要创建一个可变大小的单脚本数组,您只需使用一个指针,例如
float *array;
array = (float *) calloc(sizeof(float), n);
创建一个大小为 n 的单脚本 float 数组。我可以为双脚本数组做类似的事情吗?
最佳答案
C 中没有双脚本数组;只有数组的数组。例如。这个:
int a[3][3];
应读作“由 3 个整数组成的 3 个数组组成的数组”,而不是“由 3x3 整数组成的数组”。这可以从表达式类型中立即看出 - 例如a[0]
是一个有效的表达式,它的类型是int[3]
。
对于数组类型,数组大小是类型的一部分,因此必须在编译时知道。因此,虽然您可以使用“指向数组的指针”类型来使一维成为动态的,但其余的仍然必须是固定的:
int (*p)[3] // pointer to arrays of 3 ints each
有两种传统的解决方法:
只需使用 width x height 元素的一维动态数组,并根据 2D 坐标计算 1D 索引作为
(y * width + x)
你自己。使用指向指针的指针:
int** a = malloc(sizeof(int*) * height); for (i = 0; i < height; ++i) a[i] = malloc(sizeof(int) * width); a[0][0] = 123; ...
这里的问题是您的数组不再需要是矩形的,您无法真正强制执行它。在性能方面,它也比单个连续内存块差。
在C99中,你也可以使用变长数组:
void foo(int width, int height) {
int a[width][height];
...
}
关于c - C中的可变大小矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1651148/