如何使用malloc
分配二维数组?
这是我目前的代码:
typedef struct object product, *pprod;
struct object{
int type;
int quantity;
pprod next;
};
pprod t[4][3];
非常感谢你的帮助。
答案 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);