首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >int类型* (*) (int *,int * (*)())

int类型* (*) (int *,int * (*)())
EN

Stack Overflow用户
提问于 2010-02-13 00:52:50
回答 5查看 3.3K关注 0票数 5

int * (*) (int *,int * (*)())

我想知道它是什么类型?,谁能给出一个使用这个类型的声明的例子。

任何帮助都是最好的。

谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-02-13 00:54:50

它是一个指向返回int*并接受int*的函数的指针,是指向返回int* (并接受未定义数量的参数;请参阅注释)的函数的指针。

一些示例(看起来不是很好,它只是构造为包含前面提到的声明):

代码语言:javascript
运行
复制
#include <stdio.h>

static int a = 10;
int* f1() {
    return &a;
}

static int b;
int* f2(int *j, int*(*f)()) {
    b = *j + *f();
    // this is just for demonstrational purpose, such usage
    // of global variable makes this function not thread-safe
    return &b;
} 


int main(int argc, char *argv[]) {
    int * (*ptr1)();
    int * (*ptr2) (int * , int * (*)());
    ptr1 = f1;
    ptr2 = f2;

    int i = 42;
    int *pi = ptr2(&i, ptr1);
    printf("%d\n", *pi);

    return 0;
}

// prints 52
票数 19
EN

Stack Overflow用户

发布于 2010-02-13 01:01:00

cdecl是你的朋友:

代码语言:javascript
运行
复制
$ cdecl explain 'int * (*x) (int * , int * (*)())'
declare x as pointer to function (pointer to int, pointer to function returning pointer to int) returning pointer to int
票数 7
EN

Stack Overflow用户

发布于 2010-02-13 05:01:43

有一种技术叫做“右-左规则”,它可以帮助你破译像这样的复杂声明。该规则的工作方式是用英语关键字替换声明中出现的属性。然后,当您将关键字放在一起时,构造的句子将描述声明。

以下是您应该使用的属性和关键字:

  • 当您看到属性"()“use keyword”函数时返回“
  • 当您看到属性"n”use keyword“
  • 当您看到属性"*”use keyword“指针指向”

下面是“左-右规则”:

如果未找到,请从右侧的identifier.

  • Look开始查找attribute.

  • If

  • 找到属性后,请在查找时替换其英文attribute.

  • If

  • -left替换项。当您到达declaration.

中的数据类型时,

  • 将停止

下面是一些示例:

代码语言:javascript
运行
复制
int n[10];

标识符是n。右边的属性是数组,所以使用关键字“[10] of 10”。接下来,您将看到数据类型int。所以,

N是一个“10个整数的数组”。

代码语言:javascript
运行
复制
int *n[10];

标识符是n。右边的属性是数组,所以使用关键字“[10] of 10”。向左看,属性是*,所以使用关键字"pointer to“。没有更多的属性。剩下的就是数据类型,即int。将关键字放在一起得到:

N是“指向整数的10个指针的数组”。

代码语言:javascript
运行
复制
int (*pf)();

标识符是pf。在pf的右边没有属性。pf的左边是*。所以第一个关键字是"pointer to“。接下来,回到右边,该属性为()。这意味着下一个关键字是“返回的函数”。现在回到左边,返回到数据类型int。将关键字放在一起得到:

pf是一个“指向返回int的函数的指针”。

代码语言:javascript
运行
复制
int *(*pf)();

pf是标识符。pf的右边没有属性。左边是*,所以第一个关键字是"pointer to“。回到右边是(),所以下一个关键字是“返回的函数”。回到左边是*,所以下一个关键字是"pointer to“。接下来,转到int数据类型:

pf是一个“指向函数的指针,该函数返回指向int的指针”。

下一个示例与上一个示例类似,但这次pf函数有一些参数。参数是int *xint *(*y)()。到目前为止,您应该能够根据所有内容来描述这些论点。一旦你这样做了,你就能够描述整个事情:

代码语言:javascript
运行
复制
int *(*pf)(int *x, int *(*y)());

pf是一个指向函数的指针,该函数返回一个指向int的指针。pf有两个参数。第一个参数x是一个指向int的指针。第二个参数y是一个指向函数的指针,该函数返回一个指向int的指针。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2253509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档