gpt4 book ai didi

c++ - 函数指针 (C++)

转载 作者:太空狗 更新时间:2023-10-29 19:46:54 25 4
gpt4 key购买 nike

我正在学习 C++ 教程。我无法理解有关函数指针的示例。这是:-

// pointer to functions
#include <iostream>
using namespace std;

int addition (int a, int b)
{ return (a+b); }

int subtraction (int a, int b)
{ return (a-b); }

int operation (int x, int y, int (*functocall)(int,int))
{
int g;
g = (*functocall)(x,y);
return (g);
}

int main ()
{
int m,n;
int (*minus)(int,int) = subtraction;

m = operation (7, 5, addition);
n = operation (20, m, minus);
cout <<n;
return 0;
}

行“m = operation (7, 5, addition);”和“n = operation (20, m, minus);”的处理方式相同方式,但是虽然 minus 已被声明为指向函数的指针,但 addition 却没有。那么,它们是如何以相同的方式工作的呢?

最佳答案

在函数调用中使用函数名称作为实参参数,或者在 C/C++ 中赋值运算符的右侧,会导致转换为指向原始函数的函数指针。

例如,如果你有一个类似的函数

void my_function(int a, int b);

如果像这样在赋值运算符的右侧使用标识符 my_function:

void (*my_function_ptr)(int, int) = my_function;

然后my_function从函数对象隐式转换为void (*)(int, int)类型的函数指针,初始化标识符my_function_ptr 以便它指向 my_function。将 my_function 传递给另一个函数时也会发生同样的情况,例如:

void another_function(int, void (*)(int, int));
another_function(5, my_function);

在调用 another_function() 时,标识符 my_function 再次转换为指向原始函数的指针。

最后,请记住,只有将标识符名称传递给函数参数或将其放在赋值运算符的右侧时才会发生这种情况。使用 () 符号和可选参数列表(即 my_function(5, 6))添加函数调用将评估函数,不会导致转换为函数指针。

关于c++ - 函数指针 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6164616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com