加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

功能指针(C)

发布时间:2020-12-16 10:19:08 所属栏目:百科 来源:网络整理
导读:我正在学习C语言教程.我无法理解关于函数指针的这个例子. 这里是:- // pointer to functions#include iostreamusing 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
我正在学习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 =操作(7,加法);”和“n =操作(20,减去);”以相同的方式处理,但是当减号被声明为函数的指针时,加法没有.那么,他们是如何以同样的方式工作的呢?

解决方法

添加的类型是int(&)(int,int),它可以衰减为int(*)(int,int)类型的指针,它与操作函数的第三个参数相同.因此,您可以将add作为第三个参数传递给函数操作.

减法的类型也与添加的类型相同.在您的代码中,减法的地址首先存储为兼容类型的局部变量,然后该变量作为参数传递给操作函数.

在添加的情况下,它的地址不存储为局部变量,而是将其传递给操作.它直接用函数的地址初始化函数的第三个参数,而不使用任何局部变量.

在两种情况下都会发生从int(&)(int,int)到int(*)(int,int)的转换.只是对于变换,在初始化局部变量时进行转换,并且在初始化函数参数时进行转换.

一个类比是这样的:

void f(double a,double b) {}

int main()
{
   double x = 100;//first store 100 in a local variable
   f(x,100);  //pass the local variable as first arg,//and pass 100 as second arg without using any local variable.
}

注意100的类型是int,所以它首先转换为double类型,然后将其存储为局部变量x,然后将其作为第一个参数传递给函数f.并且第二个参数100直接传递给函数,所以即使现在它首先转换为double然后它初始化b(函数的第二个参数).

同样,在两种情况下都会发生从int到double的转换.它只是在初始化局部变量x时发生第一个参数转换,而在初始化函数的第二个参数时发生第二个参数转换.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读