Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C (int(*)()在函数调用中是什么意思_C - Fatal编程技术网

C (int(*)()在函数调用中是什么意思

C (int(*)()在函数调用中是什么意思,c,C,正如标题所说,我想知道C-define-function-call中的“(int(*)())是什么意思 例如,它看起来与此类似: #define Bla(x) (Char *) read((char *(*)()) Blub, (char **) x) 还是这个 #define XXX(nx, id) PEM_ASN1_write_bio((int (*)()) id, (char *) nx) 提前谢谢你 将参数强制转换为指向返回char*并接受零个或多个参数的函数的指针。第

正如标题所说,我想知道C-define-function-call中的“(int(*)())是什么意思

例如,它看起来与此类似:

#define Bla(x)    (Char *) read((char *(*)()) Blub, (char **) x)
还是这个

#define XXX(nx, id)     PEM_ASN1_write_bio((int (*)()) id, (char *) nx)

提前谢谢你

将参数强制转换为指向返回
char*
并接受零个或多个参数的函数的指针。第二个函数返回
int

您可以使用一个名为“”的程序(和网站,现在)来帮助这些,它说:

  • (char*(*)())
    :将未知的\u名称强制转换为指向返回char指针的函数的指针
  • (int(*)()
    :将未知的\u名称强制转换为返回int的函数指针

    • 这意味着
      read
      的名为
      Blub
      的第一个参数是指向返回
      char*
      且不接收任何参数的函数的指针。

      第一个参数表示read将“返回char指针的函数指针”作为第一个参数,“指向char指针”作为第二个参数。若你们想做Bla,只需写Bla(x),我会处理去读取部分

      第二种说法是,PEM_ASN1_write_bio的第一个参数必须是“返回int的函数指针”。第二个参数是“指向字符的指针”。你可以用XXX(a,b)代替PEM ASN1(b,a),也就是说,

      (int(*)())
      是一个类型转换操作符,也就是说你要求编译器进行操作 就好像它右边的表达式是
      int(*)(
      )类型。正如其他人所指出的那样, 该类型表示“指向接受任何参数的函数的指针, 并返回一个
      int

      要理解类型本身,首先需要理解 变量是用C语言声明的:在大多数语言中,变量声明的语法是 是根据类型规范的语法构造的,但在C语言中, 反过来说

      如果要声明一个包含指向此类函数的指针的变量,请编写:

      int (*fp)();
      
      这意味着类似于
      (*fp)(
      的表达式的类型为
      int
      :“take
      fp
      , 取消引用它,用任何参数调用它,您将得到一个
      int


      现在,为了获得上述声明中
      fp
      类型的类型转换运算符,请丢失标识符并在其周围添加括号:you get
      (int(*)()

      破译复杂C表达式的最简单方法是从最里面的表达式开始,然后以逆时针模式移动到下一个表达式。 (int(*)()

    • (*)指针,逆时针运动点击(,然后再次移动以点击)
    • (*)()指向函数的指针,移动到(,然后再次移动到)
    • int(*)指向返回int的函数的指针,移动到int,然后移动到hit on)
    • (int(*)()最后转到(,这里就是了
    • 指向返回int的函数的指针,因为它被包装在outer()中,是因为宏

      希望这有帮助, 顺致敬意,
      Tom

      事实上,cdecl无法解析these@JS刘海:我同意!说清楚一点,我和它没有任何关系,只是在回答这个问题时发现的。:)cdecl还将类似英语的句子转换成C声明。e、 g.“将p声明为指向整数的指针”会将“int*p”作为输出。