Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 通行证;指针数组“;发挥作用_C_Arrays_Pointers - Fatal编程技术网

C 通行证;指针数组“;发挥作用

C 通行证;指针数组“;发挥作用,c,arrays,pointers,C,Arrays,Pointers,我有一个带指针数组的top函数,如下所示: Membership *mf[5]; for(i=0;i<5;i++) mf[i]=(Membership*) malloc(sizeof(Membership)) call_function(*mf) void call_function(Membership mf[5]){ normalize_function(mf[0],slope); .... normalize_function(mf[5],fuel

我有一个带指针数组的top函数,如下所示:

Membership *mf[5];
for(i=0;i<5;i++)
    mf[i]=(Membership*) malloc(sizeof(Membership))
call_function(*mf)
void call_function(Membership mf[5]){
    normalize_function(mf[0],slope);
    ....
    normalize_function(mf[5],fuel);
}
其中
调用函数()
声明如下:

Membership *mf[5];
for(i=0;i<5;i++)
    mf[i]=(Membership*) malloc(sizeof(Membership))
call_function(*mf)
void call_function(Membership mf[5]){
    normalize_function(mf[0],slope);
    ....
    normalize_function(mf[5],fuel);
}
在那里,
mf
变得毫无用处,长度为1而不是5。我无法理解我做错了什么,即使是在搜索/阅读了相关内容并调试了一段时间之后。请帮助我更改
调用函数()
(不是指针数组)

编辑:根据建议,我对代码做了一些更改


Edit2:回应KyleStrand的回答:
call_function()
与指针没有任何关系,因为该函数实际上将在FPGA(VHDL编码)中实现,指针存在不必要的复杂性。

当你说
call_function
与指针没有任何关系时,不清楚你的意思。函数的最后一个参数似乎是一个
成员
s的数组,实际上数组被视为非常类似于C中的指针。当您将
*mf
传递给函数时,您正在取消对数组的引用,也就是说,您正在访问数组的第一个成员。这不是您想要的,因为
call\u函数
接受数组而不是数组成员@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);
}

请澄清您的问题,您的问题不清楚您想做什么

但是

是一个数组,其元素是类型成员的指针

如果将
mf
传递给函数,则将数组作为参数传递给函数,并且
mf
本身被视为指针。它指向其成员的第一个元素。因此在本例中,
mf
成为指向其元素中第一个成员身份指针的指针

因此在函数内部(也在函数外部):

无法获取函数中的
mf
或任何数组的长度,因为如果将数组作为参数传递,它将被视为函数中的指针,因此如果执行以下操作:

sizeof(array)/sizeof(first_element) 
sizeof(array)
函数内部的大小始终等于指针的大小,根据您的系统而定,指针的大小为4或8个字节


因此,如果您在函数中使用
sizeof(mf)/sizeof(Membership*)
来获取
mf
的长度,这意味着
8/8
4/4
始终等于1。

在调用函数时不要取消对mf的引用,即调用函数(…,mf)。该声明不应该是
void call\u函数吗(…,Membership[5]);
,也就是说,它不应该期望一个类型为
Membership
的数组(因为
mf
不是一个类型)?@JoãoPereira显示了实际代码,我觉得这里有些可疑。我只是想说数组是指向内存地址的指针的语法糖。因此,当OP说函数可以与指针无关,但却将数组传递给函数时,这导致了一个矛盾“指向5个成员资格的连续数组中的第一个元素的指针”(也称为
Membership mf[5]
)不能直接转换为“指向5个指针的连续数组中的第一个元素的指针,每个指针指向单个成员资格”(也称为
Membership*mf[5]
),反之亦然。