gpt4 book ai didi

c - 函数指针声明

转载 作者:行者123 更新时间:2023-12-04 02:08:02 25 4
gpt4 key购买 nike

  1. 要使用 typedef 声明函数指针,它将类似于:

    typedef void (*FOO)(int i)

    但通常 typedef 的语法是这样的:

    typedef int bool

    那么为什么第一个不是:

    typedef void (*)(int) FOO

  2. 返回一个函数指针(不带typedef),语法如下:

    void (*foo(char c))(int)

    这意味着 foo 接受一个 char 并返回一个指向函数的指针,该函数接受一个 int 并且不返回任何内容。语法太奇怪了!看起来 foo 接受一个 int 并且什么都不返回。括号似乎不在正确的位置。如果是返回一个函数指针,为什么不是这样的:

    (void (*)(int)) foo(char c)

    这很简单。我真的很难理解这里的语法,更不用说使用它了。有人可以解释一下这里发生了什么吗?

最佳答案

一个整数就是:

int x;

上面的名称由:

typedef int x_type;

指向 int 的指针是:

int *p;

它的类型是:

typedef int *p_type;

一个名为 foo 的函数接受一个 double`` 并返回一个 int` 是:

int foo(double);

定义 foo 的类型是:

typedef int foo_type(double);

现在指向上面的指针应该采用 *,但是 ()(函数调用)比 *(取消引用)绑定(bind)得更紧密,所以括号:

typedef int (*ptr_to_foo_type)(double);

这样写可能更好:

typedef foo_type *ptr_to_foo_type;

有些人建议为了清楚起见而写作。

想法是类型描述看起来(有点)像它的用途。给定前缀/后缀运算符的想法被严重破坏,每个人都同意。但现在改变已经太晚了。

关于c - 函数指针声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22363929/

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