gpt4 book ai didi

c - 如何在函数之间传递数组

转载 作者:太空宇宙 更新时间:2023-11-04 03:05:34 25 4
gpt4 key购买 nike

有人可以帮助我吗?我的 C 程序有问题。在这里:

在我的 main 中,我调用了一个函数 (func A),其中两个参数是第二个函数 (fun B) 和“用户数据”(原则上可以是单个数字、字符或数组)。这个“用户数据”也是函数 B 的参数。当“用户数据”是单个整数时,我可以正常工作,但现在我需要将它用作数组。所以现在的工作结构是这样的:

static int FunB(...,void *userdata_)  
{
int *a=userdata_;
...
(here I use *a that in this case will be 47)
...
}

int main()
{
int b=47;
funcA(...,FunB,&b)
}

所以现在我希望 b 在 main 中作为一个数组(例如 {3,45} ),以便将一个以上的“数据”传递给函数 B。

谢谢

最佳答案

至少有两种方法可以做到这一点。

首先

static int FunB(..., void *userdata_)  
{
int *a = userdata_;
/* Here `a[0]` is 3, and `a[1]` is 45 */
...
}

int main()
{
int b[] = { 3, 45 };
funcA(..., FunB, b); /* Note: `b`, not `&b` */
}

第二

static int FunB(..., void *userdata_)  
{
int (*a)[2] = userdata_;
/* Here `(*a)[0]` is 3, and `(*a)[1]` is 45 */
...
}

int main()
{
int b[] = { 3, 45 };
funcA(..., FunB, &b); /* Note: `&b`, not `b` */
}

选择你更喜欢哪一个。请注意,第二个变体专门针对数组大小固定且在编译时已知的情况(在本例中为 2)。在这种情况下,第二种变体实际上更可取。

如果数组大小不固定,则必须使用第一个变体。当然,您必须以某种方式将该大小传递给 FunB

注意数组是如何传递给 funcA(作为 b 或作为 &b)以及如何在 中访问它FunB(作为 a[i] 或作为 (*a)[i])在两种变体中。如果您未能正确执行此操作,代码可能会编译但无法运行。

关于c - 如何在函数之间传递数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5683756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com