1

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

int (*p)[3];

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

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

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

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

4

2 回答 2

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]

于 2012-05-14T15:24:46.827 回答
0

你的理解是正确的。 calloc分配并清零足够的连续内存以容纳 15int秒,并返回指向其开头的指针。

于 2012-05-14T15:24:29.947 回答