【问题标题】:C programming call functionC编程调用函数
【发布时间】:2016-08-14 01:29:16
【问题描述】:

我是 C 编程新手,想学习基础知识。谁能帮助我如何调用具有指针参数的函数?

我在user.c 文件中的代码:

struct user * play_game(struct user * first, struct user * second)
{
    game_board board;
    enum cell token;
    struct user * current, *other, *winner;
}

代码也在user.h 文件中,但没有 inside 语句。 我怎样才能在main.c 文件中调用它?我不确定参数是什么以及它是如何工作的。

【问题讨论】:

  • 您对一元 &* 运算符有什么了解? main() 程序中的变量类型是什么,因为这将控制您调用函数的方式。如果你有struct user *u1 = …; struct user *u2 = …;,你将使用struct user *winner = play_game(u1, u2);——但如果你有struct user u1 = { … }; struct user u2 = { … };,你将使用struct user *winner = play_game(&u1, &u2);
  • 我的编程知识真的不好抱歉。我现在所知道的是,如果一个变量有一个 * 这意味着它是一个指针,如果我是正确的,它意味着它的地址。我试图在 main () 之前声明 struct user * play_game(struct user * first, struct user * second) 并在其中放入代码 user * play_game(struct user * first, struct user * second)。不确定我是否以您能理解的方式描述它。
  • 您对*& 的理解或多或少是准确的——粗略但暂时可能已经足够好了。假设您已经在某处定义了struct user,您应该可以接受所显示的函数声明。如果您遇到编译错误,您需要向我们展示 MCVE (minimal reproducible example) — 以及实际的错误消息。行号应该足够小(比如 30 以下),以便我们很容易看出哪里出了问题。如果行号不是那么小,则代码可能还不够少。
  • 对不起,代码应该是播放器而不是用户。 “struct player * play_game(struct player * first, struct player * second)。我得到的错误是“error: unknown type name ‘player’”和“error: conflicting types for ‘play_game’”。
  • 选择一个名称并使其在任何地方都保持一致。听起来您修复了源文件 (.c) 中的函数,但忘记更改标题 (.h) 文件。

标签: c function pointers struct


【解决方案1】:

您应该在 main.c 中包含 user.h,并在 user.c 中包含 user.h,这样您就可以实现在 user.h 中声明的函数,就像在接口中一样。

在 main.c 中,您将两个 struct user* 作为函数的参数。 struct user *var 是具有指针类型的常用变量,其中包含某个地址值。要初始化此指针,您可以使用 var = (struct user*)malloc(sizeof(*var))struct user a; var = &a 构造。在第一种情况下,您在堆上分配新结构,在第二种情况下,您获得在堆栈上创建的变量的地址。

一些调用你的函数的代码示例:

struct user* result;
struct user* param1 = (struct user*)malloc(sizeof(*param1));
/* initialize ...*/
struct user param2;
/* initialize ...*/
result = play_game(param1, &param2);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    相关资源
    最近更新 更多