我遇到以下情况,传递给函数的结构数组。所以,在函数内部我正在处理双指针。现在我很困惑,它正在工作,但我不确定为什么它在两种方式都有效(我喜欢以不同的方式尝试,所以我会更好地理解它)。
接收数组作为参数:Rules **rules_array
示例1:
rules_array = (Rules**) malloc(alloc_size*sizeof(Rules*));
通过在示例1中执行,我希望再制作一个循环来为所有这些将从Rules *元素指向的结构(数组元素)分配内存,但显然它不是必需的,这就是我所不知道的不明白。
示例2(这对我来说更有意义):
*rules_array = (Rules*) malloc(alloc_size*sizeof(Rules));
提前致谢!
答案 0 :(得分:2)
第二个例子是正确的。
您想要创建Rules
的1维数组。所以你为alloc_size*sizeof(Rules)
字节分配空间。因为您的函数(可能)传递了指针的地址(即Rules **
),所以您希望将分配的内存分配给解除引用的指针,即*rules_array
。然后当函数返回时,您可以访问该内存。
唯一需要改变的是摆脱演员阵容。转换malloc
的返回值可能会掩盖代码中的其他错误。有关详细信息,请参阅Do I cast the result of malloc?。
您对第一个例子的假设是正确的。这是创建二维数组的第1部分,或者更准确地说是指针数组,每个指针都指向一个数组。在这种情况下,您需要返回rules_array
并将其分配给Rules **
,或者传递Rules **
的地址,以便rules_array
为Rules ***
并在分配之前取消引用它。