使用二维数组malloc进行结构化

时间:2015-03-03 19:31:15

标签: c arrays struct floating-point malloc

是否可以在C中使用malloc这个结构?

typedef struct  {
    float a[n][M];
}myStruct;

我尝试过不同的方法但没有成功。

3 个答案:

答案 0 :(得分:1)

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

#define N 10
#define M 15

typedef struct {
    float a[N][M];
} myStruct;

int main(void)
{
    myStruct *m;

    m = malloc(sizeof(*m));
    printf("size = %zu\n", sizeof(*m));
    free(m);

    return EXIT_SUCCESS;
}

答案 1 :(得分:1)

假设nM是编译时常量,你只需要

myStruct *p = malloc (sizeof myStruct);

myStruct *p = malloc (sizeof *p);

如果你真的想要&#39;我如何分配一个结构的N x M数组,其中n和M在编译时不知道,答案是:

typedef struct {
   float x;
} myStruct;

...

myStruct *p = malloc (sizeof myStruct * M * N);

然后以p[M * m + n]0<=m<M

的身份访问0<=n<N

答案 2 :(得分:0)

你需要一个双指针,即一个指针数组的指针,就像这个

typedef struct  {
    float **data;
    unsigned int rows;
    unsigned int columns;
} MyStruct;

然后到malloc()

MyStruct container;

container.rows    = SOME_INTEGER;
container.columns = SOME_OTHER_INTEGER;
container.data    = malloc(sizeof(float *) * container.rows);
if (container.data == NULL)
    stop_DoNot_ContinueFilling_the_array();
for (unsigned int i = 0 ; i < container.rows ; ++i)
    container.data[i] = malloc(sizeof(float) * container.columns);

不要忘记在解除引用之前检查container.data[i] != NULL,也不要忘记free()所有的poitners和指向poitner数组的指针。