功能指针(C)
我正在学习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时发生第一个参数转换,而在初始化函数的第二个参数时发生第二个参数转换. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |