矩阵分配在一行中

时间:2012-05-14 15:20:49

标签: c arrays memory-management matrix

在互联网上看到一些代码我遇到了这段代码:

int (*p)[3];

p = (int(*)[3]) calloc(5*3,sizeof(int));

它只是一种分配矩阵的方法吗?

我理解int (*p)[3]创建一个指向3 int数组的指针,但我不确定calloc调用:我知道calloc分配并初始化一些int(在本例中)等于第一个参数(5*3) 因此,如果我将它分配给p,它应该意味着指针现在指向刚分配的内存位置。

所以,既然我知道我的推理是错误的,那么有人可以纠正我吗?

2 个答案:

答案 0 :(得分:3)

int (*p)[3];

你确实这是一个指向三个整数数组的指针,但是这个指针也可以指向三个整数的数组的开头。

p = (int(*)[3]) calloc(5*3,sizeof(int));

在这里,您为此指针分配5 * 3个整数。由于int[3]有3个整数,因此您只分配了5个int[3]数组。

然后,您可以将这些int[3]数组称为

p[0] ... p[4]

所以你得到一个二维数组范围

p[0][0] ... p[0][2]

p[4][0] ... p[4][2]

答案 1 :(得分:0)

您的理解是正确的。 calloc分配和填充足够的连续内存来保存15 int s,并返回指向它开头的指针。