[英]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.