在互联网上看到一些代码我遇到了这段代码:
int (*p)[3];
p = (int(*)[3]) calloc(5*3,sizeof(int));
它只是一种分配矩阵的方法吗?
我理解int (*p)[3]
创建一个指向3 int数组的指针,但我不确定calloc
调用:我知道calloc
分配并初始化一些int
(在本例中)等于第一个参数(5*3
)
因此,如果我将它分配给p
,它应该意味着指针现在指向刚分配的内存位置。
所以,既然我知道我的推理是错误的,那么有人可以纠正我吗?
答案 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,并返回指向它开头的指针。