c - 一行矩阵分配

标签 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,它应该意味着指针现在指向刚刚分配的内存位置。

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

最佳答案

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/

相关文章:

delphi - Delphi 中的第三方垃圾收集解决方案

c++ - C/C++检测网络类型

iPhone SDK : Please explain why "nil ==" is different than "== nil"

c - C中将数组和数组指针传递给函数的区别

java - 数组中的数组 - Java 代码

c++ - 对象数组是如何存储在内存中的?

java - 通过 JNI 对 C 和 Java 代码使用互斥锁或其他同步方法

C函数,使用指针而不是返回

javascript - 根据最小值重新分配百分比范围,同时保持相对比例

database - 如何使用 LINQ-To-SQL 避免内存泄漏?