gpt4 book ai didi

c - C中的可变大小矩阵

转载 作者:太空宇宙 更新时间:2023-11-04 05:01:06 25 4
gpt4 key购买 nike

有没有什么方法可以在 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

有两种传统的解决方法:

  1. 只需使用 width x height 元素的一维动态数组,并根据 2D 坐标计算 1D 索引作为 (y * width + x) 你自己。

  2. 使用指向指针的指针:

    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/

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