[英]Passing “array of pointers” to function
我有一个top函数,有一个像这样的指针数组:
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()
(不是指针数组)。
编辑:正如建议我对代码做了一些更改。
编辑2:回应KyleStrand的回答: call_function()
与指针无关,因为该函数实际上将在FPGA中实现(VHDL编码),指针存在不必要的复杂情况。
当你说call_function
“与指针无关”时,你不清楚你的意思。 似乎函数的最后一个参数是一个Membership
数组,实际上一个数组的处理方式与C中的指针非常相似。当你将*mf
传递给函数时,你正在取消引用数组,也就是说,你正在访问数组的第一个成员 。 这不是你想要的,因为call_function
采用数组而不是数组成员 。 @ caveman的评论是正确的:你应该传递原始数组 (即没有解除引用它)。
你似乎有一些类型问题。 这是您应该具有的那种格式。 这是一个社区维基,所以其他人可以清理和改进。
void call_function (Membership* local_mf[5])
{
Membership* m = local_mf[0];
}
int main (void)
{
Membership* mf[5];
... // malloc, etc, etc.
call_function (mf);
}
请澄清您的问题,从您的问题中不清楚您想要做什么。
但
Membership *mf[5]
是一个数组,其元素是Membership类型的指针
如果将mf
传递给函数,则将数组作为参数传递给函数,并将mf
本身视为指针。 它指向其成员的第一个要素。 所以在这种情况下, mf
成为指向其元素中第一个Membership指针的指针。
所以在函数内部(函数外部):
*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。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.