我遇到以下情况,结构数组传递给函数。所以,在函数内部我正在处理双指针。现在我很困惑,它正在工作,但我不确定为什么它在两种方式上都工作(我喜欢以不同的方式尝试,这样我就能更好地理解它)。
数组作为参数接收:Rules **rules_array
示例1:
rules_array = (Rules**) malloc(alloc_size*sizeof(Rules*));
通过像示例 1 中那样进行操作,我希望再进行一个循环来为将从 Rules* 元素指向的所有这些结构(数组元素)分配内存,但显然不需要它,这就是我所做的听不懂。
示例 2(对我来说更有意义):
*rules_array = (Rules*) malloc(alloc_size*sizeof(Rules));
提前致谢!
最佳答案
第二个例子是正确的。
您想要创建规则
的一维数组。因此,您分配 alloc_size*sizeof(Rules)
字节的空间。因为您的函数(大概)传递了指针的地址(即 Rules **
),所以您希望将分配的内存分配给取消引用的指针,即 *rules_array
。然后,当函数返回时,您就可以访问该内存。
唯一需要改变的是摆脱 Actor 阵容。转换 malloc
的返回值可以掩盖代码中的其他错误。请参阅Do I cast the result of malloc?了解更多详情。
您对第一个示例的假设是正确的。这是创建二维数组(或更准确地说是指针数组)的第 1 部分,每个指针都指向一个数组。在这种情况下,您需要返回 rules_array
并将其分配给 Rules **
,或者传递 Rules **
的地址这样 rules_array
是一个 Rules ***
并在分配给它之前取消引用它。
关于c - 结构数组的内存分配? 2个例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35155610/