传递"指针数组"发挥作用

时间:2015-02-23 20:19:57

标签: c arrays pointers

我有一个带有像这样的指针数组的顶级函数:

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编码)中实现,指针也是如此不必要的并发症。

3 个答案:

答案 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/84/4,它总是等于1。