3

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

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

pprod t[4][3];

非常感谢你的帮助。

4

2 回答 2

3

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

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

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

t[i][j]

好像它被宣布了

pprod t[n][m];

(如果malloc不返回NULL)。

这种分配分配一个连续的内存块,与分配一个pprod **将不同。

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

于 2013-05-31T17:38:40.903 回答
1

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

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

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

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);
于 2013-05-31T17:36:51.117 回答