【问题标题】:What is the difference between int (*cmp)(void) and int *cmp(void)?int (*cmp)(void) 和 int *cmp(void) 有什么区别?
【发布时间】:2020-02-28 11:42:40
【问题描述】:

有什么区别

extern int (*func)(void);

extern int *func(void);

谢谢

【问题讨论】:

  • 一个是函数指针,另一个是返回int指针的函数。
  • @PiRocks 您可以将其发布为问题的答案。真的,不需要更多细节。
  • 我想这对于 meta 来说比 cmets 更像是一个离题的问题,但这个问题对我来说似乎是重复的。不过,我无法快速找到它的副本。所以就像它是重复的但不是。那么它应该被标记吗?
  • 看到 stackoverflow.com/questions/14114749/c-function-pointer-syntaxsoftwareengineering.stackexchange.com/questions/117024/… 我还要说这是重复的,不应该用作(“看起来不错”)审计问题!

标签: c


【解决方案1】:
extern int (*func)(void);

func 声明为指向不带参数并返回int 值的函数的指针。

extern int *func(void);

func 的前向声明(也称为 protptype),它是一个不带参数并返回指向 int 的指针的函数。

第一个声明一个变量,第二个声明一个函数

【讨论】:

    【解决方案2】:

    int (*cmp)(void)int *cmp(void) 之间的区别?

    使用C gibberish ↔ English1

    指针声明
    extern int (*cmp)(void);extern pointer to function (void) returning int

    函数声明
    extern int *cmp(void);extern function (void) returning pointer to int


    1 "func" 是那里的关键字,使用 `"cmp"。

    【讨论】:

      【解决方案3】:

      如果将类型 fp 声明为指向函数的指针,则编译器会将 fp() 解释为取消引用 fp 以获取函数的地址。

      然而,如果 fp 被声明为函数本身,那么文件中的任何 fp() 都将被编译器解释为接近调用 fp 的地址.

      意思是,链接器会将跳转修复为调用者地址与fp的地址之间的偏移量自身

      不是位于fp的地址,而是fp的偏移量。

      【讨论】:

      • 更像是近距离的呼叫,而不是近距离的跳跃。
      猜你喜欢
      • 1970-01-01
      • 2020-09-16
      • 2018-03-16
      • 1970-01-01
      • 2016-07-24
      • 2013-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多