【问题标题】:what does this type int * ( * ) ( int * ) represent in c language?这种类型 int * ( * ) ( int * ) 在 c 语言中代表什么?
【发布时间】:2018-12-24 20:36:03
【问题描述】:

谁能准确解释一下这种类型在 C 语言中的 int * (*) (int *) 是什么意思?

谢谢,

【问题讨论】:

标签: c pointers function-pointers


【解决方案1】:

除非int 被定义为宏,否则int * (*) (int *) 既不包含任何常量也不包含任何标识符,因此它不能是表达式。相反,它是一个类型。具体来说,它是一个指向函数的指针类型,它接受一个int * 类型的参数,并返回一个int * 类型的值。例如,它与指向该函数的指针兼容:

int *foo(int *x) {
    return x + 1;
}

您可以在类型转换表达式中使用它,例如在这个人为的示例中:

int *(*p)() = foo;
int *(*p2)(int *) = (int * (*)(int *)) p;
// here ------------^^^^^^^^^^^^^^^^^^

【讨论】:

    【解决方案2】:

    这个

    int * (*) (int *); /* not valid expression */
    

    不是C 中的有效语法。你可能想知道

    int * (*func) (int *); /* valid : function pointer declaration */
    

    其中func是一个函数指针,可以指向一个函数,该函数接受int*类型的输入参数并返回int*

    【讨论】:

    • 这是有效的语法。如果你删除变量func,你就剩下它的类型:一个指向函数的指针,它的签名就是你所描述的。
    • 我不明白你的问题。在 C++ 中,使用 C 的这种有效语法,我可以声明一个 vector 指向具有该签名的函数的指针。如std::vector<int * (*) (int *)> myfuncs;
    【解决方案3】:

    您必须阅读有关阅读 C 声明的“左右”规则。 这是提供说明的链接。而不是给出答案,这将帮助您学习自己练习的东西。 http://cseweb.ucsd.edu/~ricko/rt_lt.rule.html

    【讨论】:

      猜你喜欢
      • 2016-12-03
      • 2020-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-29
      • 2016-01-02
      • 1970-01-01
      • 2011-01-11
      相关资源
      最近更新 更多