繁体   English   中英

将“指针数组”传递给函数

[英]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/84/4总是等于1。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM