我有一个带有像这样的指针数组的顶级函数:
Membership *mf[5];
for(i=0;i<5;i++)
mf[i]=(Membership*) malloc(sizeof(Membership))
其中Membership
是一个结构。
到目前为止一直很好,在调试时,mf
正确地显示了所有5个实体。问题是当我将指针数组传递给函数(它不能与指针有任何关系)时,如下所示:
call_function(*mf)
其中call_function()
的声明如下:
void call_function(Membership mf[5]){
normalize_function(mf[0],slope);
....
normalize_function(mf[5],fuel);
}
在那里,mf
变得无用,长度为1而不是5.我无法理解我做错了什么,即使在搜索/阅读此内容并调试一段时间后也是如此。请帮我看看如何更改call_function()
(不是指针数组)。
编辑:正如建议我对代码做了一些更改。
Edit2:回应KyleStrand的回答:call_function()
无法与指针有任何关系,因为该功能实际上将在FPGA(VHDL编码)中实现,指针也是如此不必要的并发症。
答案 0 :(得分:2)
当你说call_function
&#34;无法与指针&#34;有关时,它不清楚你的意思。函数的最后一个参数似乎是Membership
s 的数组,实际上数组的处理方式与C中的指针非常相似。当你传递{{1对于该函数,您解除引用数组,也就是说,您正在访问数组的第一个成员。这不是您想要的,因为*mf
采用数组而不是数组成员。 @ caveman的评论是正确的:您应该传递原始数组(即不取消引用它)。
答案 1 :(得分:1)
您似乎遇到了一些类型问题。这是您应该具有的那种格式。这是一个社区维基,所以其他人可以清理和改进。
void call_function (Membership* local_mf[5])
{
Membership* m = local_mf[0];
}
int main (void)
{
Membership* mf[5];
... // malloc, etc, etc.
call_function (mf);
}
答案 2 :(得分:0)
请澄清您的问题,从您的问题中不清楚您想要做什么。
但是
Membership *mf[5]
是一个数组,其元素是Membership
类型的指针如果将mf
传递给函数,则将数组作为参数传递给函数,mf
本身被视为指针。它指向其成员的第一个要素。因此,在这种情况下,mf
成为指向其元素中第一个成员指针的指针。
所以在函数内部(函数外部):
*mf would give you a pointer of type Membership (the first pointer)
*(mf+1) would give you a pointer of type Membersip (the second element)
**mf would give you an element of type membership (the element which the first pointer evaluates to).
你不能得到mf
或函数内任何数组的长度,因为如果你将一个数组作为参数传递,它就像一个函数内部的指针一样,所以如果你这样做:
sizeof(array)/sizeof(first_element)
函数内部的 sizeof(array)
总是等于指针的大小,根据你的系统,它将是4或8个字节。
因此,如果您使用sizeof(mf)/sizeof(Membership*)
获取函数内mf
的长度,则只需8/8
或4/4
,它总是等于1。