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