C语言 malloc()用于二维数组



我想初始化一个n*n方阵,以便稍后通过引用将其传递给另一个函数。但它甚至不能编译。我什么都试过了,请帮帮我。

#include<stdlib.h>
int main()
{
    int i, j, n = 3;
    float **a;
    a = malloc(n * sizeof (float **));//Here I try to create the n pointers to pointer to float for the rows
    for(i = 1;i <= n;i++){
        a[i] = malloc(n * sizeof(float *)); //Here I try to create the n * n pointers to float for the columns
    for(j = 1;j <= n;j++)
        *(*(a + i - 1) + j - 1) = malloc(sizeof(float));  //Here I try to free the space for the elements
    return 0;
}

你需要这样声明:

float **a;
a = malloc(n * sizeof (float *)); // rows
for(i = 0;i < n;i++){
        a[i] = malloc(n * sizeof(float)); // cols
}

您的代码显示的内容与您的注释所建议的内容不同。

这里我尝试创建n * n个指针来浮动

通常,一个二维float"数组"有N x N浮点数,而不是N x N指向float的指针。你正在制作一个三维"数组",其中最里面的维度是1。

你也在你的sizeof表达式中使用了错误的类型,所以你malloc的内存量是错误的。

请澄清是否一个二维的"数组"是你想要的,或者如果你真的需要额外的间接级别在你的代码。(之后我会更新我的答案)。

(NB。我用引号括"数组"是因为我们讨论的不是真正的多维数组;它实际上是指向float类型数组第一个元素的指针数组(或者在3d情况下,指向指向float类型数组的指针数组)。

相关内容

  • 没有找到相关文章

最新更新