簡體   English   中英

如何在C中分配數組2D

[英]How to malloc array 2d in C

我有這個數組:

float (*probability)[4];

這是2D數組,但是我不知道first []的數量,可以在之后的某個函數中計算得出,而在那個函數中,我不知道如何malloc()這個數組。

我的代碼是這樣的:

int main(int argc, char ** argv){
    float (*probability)[4];
    some_function_to_malloc(&probability);
    return 0;
}

首先, float (*probability)[4]不是2D數組。 它是指向包含四個float一維數組的指針。 他們是不同的東西。

其次,使用malloc()而不引入意外類型錯誤的習慣用法是

  probability = malloc(sizeof (*probability) * number_desired);

在帶有傳遞參數的函數中這樣做

 void some_function_to_malloc(float (**probability)[4])
 {
      *probability = malloc(sizeof(**probability) * number_desired);
 }

不要忘記使用#include <stdlib.h>來使用malloc()

一個完整的例子是

#include<stdio.h>
#include<stdlib.h>

void malloc_fn(float (**x)[4]){
*x=malloc(sizeof((**x))); // allocating for one int[4]
}
int main(void)
{
int i;
float (*probability)[4];
malloc_fn(&probability);
for(i=0;i<4;i++){
    (*probability)[i]=i; 
    // As pointers support array-style dereferencing,
    // (*(probability+0))[i] is equivalent to probability[0][i]
    // Note we have only allocated memory for one int[4] in our function
    // So probability[1] points to another int[4], which we have not allocated.
    // (*probability)[i]=i; is equivalent to probability[0][i]=i, See printf
}
printf("Printing the array\n");
for(i=0;i<4;i++){
    printf("%f\n",probability[0][i]); // Equivalent to (*probability)[i]
}
return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM