【问题标题】:Struct Notation结构符号
【发布时间】:2012-03-07 15:13:07
【问题描述】:

我需要澄清 C 中的以下符号:

我有一个结构,在该结构中我有以下字段:

bool (* process_builtin)(struct esh_command *);

我在这里很困惑..所以这是一个布尔字段..process_builtin 到底是什么?我已经定义了一个结构esh_command,但我不知道它在这个领域的作用。有人可以解释一下整个事情的含义吗?

【问题讨论】:

    标签: c struct boolean


    【解决方案1】:

    这不是一个布尔字段,这是一个pointer to a function 接受一个struct esh_command* 并返回一个bool;该字段名为process_builtin

    你也可以写:

    typedef bool (* process_builtin_t)(struct esh_command *);
    

    在这种情况下,process_builtin_t 将是一种类型,在这种情况下,您可以将 struct 成员的定义编写为:

    process_builtin_t process_builtin;
    

    【讨论】:

    • 是否:bool process_builtins(struct esh_command *command) 是正确的定义标题?
    • 您的意思是,指向具有该原型的函数的指针可以存储在成员中吗?是的。
    • 这个“会员”怎么称呼? name_of_struct->process_builtin?那么process_builtin 函数在->process_builtin 成员中存储真/假?
    • 正如我在回答中所说,process_builtin 不是布尔值;它是一个可以调用的函数指针。 bool foo = name_of_struct.process_builtin(some_esh_cmd);
    • 函数指针是一个指针,所以你让它指向一个函数。这只是一个问题,例如char *(*p)(char const *, int) = strchr; 然后,您可以根据需要重置p = strrchr,因为这些函数具有相同的原型。在任何好的 C 书籍中查找函数指针。
    【解决方案2】:

    这是一个指向function 的指针。使用cdecl(并将bool 更改为int)显示:

    declare process_builtin as pointer to function (pointer to struct esh_command) returning int
    

    link 是整个输出的永久链接。

    【讨论】:

      【解决方案3】:

      process_builtin 是一个函数指针。它指向的函数接受esh_command* 作为参数并返回bool

      【讨论】:

      • 技术上,它需要一个struct esh_command*(不是esh_command*),因为esh_command 没有在C 中命名一个没有struct 关键字的类型。
      【解决方案4】:

      这是一个指向函数的指针,它将指向 struct esh_command 的指针作为参数并返回一个布尔值。

      http://www.cprogramming.com/tutorial/function-pointers.html

      【讨论】:

        猜你喜欢
        • 2017-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-05
        • 1970-01-01
        • 2015-11-13
        相关资源
        最近更新 更多