分配二维数组

时间:2013-05-31 17:30:58

标签: c pointers data-structures malloc

如何使用malloc分配二维数组? 这是我目前的代码:

typedef struct object product, *pprod;
struct object{
    int type;
    int quantity;
    pprod next;
};

pprod t[4][3];

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:3)

以这样的方式分配内存,使布局与普通的二维数组 - 或数组数组 - 兼容,你需要一个指向适当大小的数组的指针,

pprod (*t)[m] = malloc(n * sizeof *t);

因此t是指向m类型pprod元素数组的指针,您可以简单地使用它

t[i][j]

好像已宣布

pprod t[n][m];

(如果malloc未返回NULL)。

此分配会分配一个连续的内存块,与分配pprod **不同。

(注意:如果m不是编译时常量,那要求编译器支持可变长度数组,它不适用于MSVC。)

答案 1 :(得分:1)

对于2D数组,您应该定义一个指针,如:

typedef struct obj OBJECT;
OBJECT **2Dptr = malloc (sizeof(OBJECT*)*rows)
for(i=0;i<rows;i++)
  2Dptr[i]=malloc(sizeof(OBJECT)*total_objects) //columns

还有其他方法,您可以定义指向struct对象的指针数组。

if you want object[5][10]
you can create 5 pointers to array of 10 objects;

如果您希望内存连续,那么您可以

*2Dptr=malloc(sizeof(OBJECT) * rows * cols);  //allocate contiguosly
**access_ptr = malloc(sizeof(OBJECT*) * rows);
for(i=0;i<row;i++)
   access_ptr[i]= 2Dptr+(i*cols);