首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多次调用函数-(将函数作为参数传递)-C

多次调用函数-(将函数作为参数传递)-C
EN

Stack Overflow用户
提问于 2019-12-22 21:21:34
回答 2查看 112关注 0票数 5

因此,下面的代码可以作为参数传递一个函数:

代码语言:javascript
复制
void printNumber(int nbr)
{
    printf("%d\n", nbr);
}

void myFunction(void (*f)(int))
{
    for(int i = 0; i < 5; i++)
    {
        (*f)(i);
    }
}

int main(void)
{
    myFunction(printNumber);
    return (0);
}

但是,如何更改该代码,使“printNumber”的整数在“myFunction”之外定义?换句话说,我只想用相同的整数调用函数“myFunction”x次。

我编写了一些伪代码来解释我要完成的任务:

代码语言:javascript
复制
void printNumber(int nbr)
{
    printf("%d\n", nbr);
}

void myFunction(void (*f)(*int)) //pseudocode
{
    for(int i = 0; i < 5; i++)
    {
        (*f)(*int); //pseudocode
    }
}

int main(void)
{
    myFunction(printNumber(5)); //pseudocode
    return (0);
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-22 21:25:39

printnumber(5)意味着立即调用printnumber并将其传递给5。

代码语言:javascript
复制
void printNumber(int nbr)
{
    printf("%d\n", nbr);
}

// void (*f)(int) is a pointer to a function that takes an int
// arg is the int to pass in
void myFunction(void (*f)(int), int arg)
{
    for(int i = 0; i < 5; i++)
    {
        // call f and pass in arg
        (*f)(arg);
    }
}

int main(void)
{
    // pass the function and the arg to use
    myFunction(printNumber, 5);
    return (0);
}
票数 7
EN

Stack Overflow用户

发布于 2019-12-22 21:26:37

你需要再争论一次。

代码语言:javascript
复制
void printNumber(int nbr)
{
    printf("%d\n", nbr);
}

void myFunction(void (*f)(int), int Arg)
{
    for(int i = 0; i < 5; i++)
    {
        (*f)(Arg);
    }
}

int main(void)
{
    myFunction(printNumber, 42);
    return (0);
}

参数声明void (*f)(int)只表示f指向的函数需要一个int。这并不意味着int也会以某种方式打包到函数指针中。

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

https://stackoverflow.com/questions/59448119

复制
相关文章

相似问题

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