【问题标题】:Explain the following code?解释下面的代码?
【发布时间】:2023-04-06 23:44:02
【问题描述】:

关于下面的sn-p代码(用C编写)有几件事我不明白:

struct T {
int a;
int *b;
struct T *next;
} ;

struct T *p1;

struct T* (*f)(int, int, struct T*);

struct T* g(int a, int b, struct T* c)
{
    return (a > b ? c : NULL);
}

f = &g;
p1 = (*f)(4,3,p1);

具体来说,这条线是什么意思?

struct T* (*f)(int, int, struct T*);

这是一个函数吗?如果是这样,为什么它没有主体,为什么似乎缺少形式参数名称?如果没有主体,这个函数会返回什么?

另外,下面的作业是怎么回事?

f = &g;

【问题讨论】:

  • 建议编译这个并通过调试器运行。
  • 这里有一个很好的函数指针教程:newty.de/fpt/index.html

标签: c function assign


【解决方案1】:

struct T* (*f)(int, int, struct T*);,是函数指针, 在哪里定义指向函数的指针,它接受三个参数(int, int, struct T*)

代码f = &g; 表示您正在为函数指针f 分配函数g

【讨论】:

    【解决方案2】:

    特别是,这条线是什么意思?

    struct T* (f)(int, int, struct T);

    将 f 声明为指向函数的指针,该函数接受参数 (int, int, struct T*) 并返回指向 struct T 的指针。

    这是一个函数吗?

    没有。但是,f 可以指向一个函数。

    为什么它没有身体?

    作为一个函数的指针,它只需要足够的定义就可以让编译器知道它所指向的函数的原型。在这种情况下,它最终指向函数 g;因此它的原型应该与 g 的定义相匹配(否则会产生警告)。

    为什么似乎缺少形式参数名称

    参数的名称对于函数指针是可选的。只需要参数类型。

    另外,下面的作业是怎么回事?

    f = &g;
    

    (function)指针f被分配(function)g的地址。

    最后……

    p1 = (*f)(4,3,p1);
    

    f 所指向的函数(即:g)被调用时的值是(4,3,p1)。返回的值被放入 p1。

    【讨论】:

      【解决方案3】:

      所以f 是一个指向函数的指针,它接受int, int, struc T * 并返回一个struct T *f 分配给g 的地址,这是一个普通的或花园的功能。那么带有p1 的那一行是调用f(),它实际上调用了g()

      顺便说一句,我可以认真推荐 Peter van der Linden 的书“Deep C Secrets” - 非常易读,现在以 pdf 格式发布。

      【讨论】:

        【解决方案4】:

        您正在查看一个函数指针变量。这里是how to parse them

        结构 T* (*f)(int, int, 结构 T*);

        f 是一个指针

        struct T* (*f) (int, int, struct T*);

        ..到一个函数,它接受两个int 参数和一个指向struct T 的指针

        struct T* (*f)(int, int, struct T*);

        ..并返回一个指向struct T的指针

        既然知道f是一个函数指针变量,那么f = &g;的含义应该很明显了。

        提示:g 是一个函数。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-02-20
          • 2015-01-06
          • 2016-10-05
          • 1970-01-01
          • 1970-01-01
          • 2021-10-27
          相关资源
          最近更新 更多