函数指针(函数指针作为函数形参/函数类型作为函数返回类型)

您所在的位置:网站首页 函数名作为形参 函数指针(函数指针作为函数形参/函数类型作为函数返回类型)

函数指针(函数指针作为函数形参/函数类型作为函数返回类型)

2024-02-14 05:52| 来源: 网络整理| 查看: 265

函数指针是指向函数的指针变量。 因此“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。函数指针有两个用途:调用函数和做函数的参数。

1 #include 2 int max(int x,int y){return (x>y? x:y);} 3 int main() 4 { 5 int (*ptr)(int, int); 6 int a, b, c; 7 ptr = max; 8 scanf("%d%d", &a, &b); 9 c = (*ptr)(a,b); 10 printf("a=%d, b=%d, max=%d", a, b, c); 11 return 0; 12 }

以上来自百度百科

 

函数指针指向的是函数而非对象。和其他指针一样,函数指针指向某种特定类型。函数的类型由它的返回类型和形参类型共同决定,与函数名无关:

bool length_compare(const string &, const string &);

该函数的类型是 bool(const string &, const string &);想要声明一个指向该函数的指针,只要用指针替换函数名即可:

1 #include 2 using namespace std; 3 4 bool leng_compare(const string &s1, const string &s2){ 5 return s1.size() > s2.size(); 6 } 7 8 int main(void){ 9 //pf指向一个函数,该函数的参数是两个 const string 的引用,返回值是 bool 类型 10 bool (*pf) (const string &, const string &);//未初始化 11 return 0; 12 }

注意 *pf 两端的括号必不可少的。如果不写这对括号,则 pf 是一个返回值为 bool 指针的函数。

 

使用指针函数:

当我们把函数名作为一个值使用时,该函数自动地转换成指针:

#include using namespace std; bool leng_compare(const string &s1, const string &s2){ return s1.size() > s2.size(); } int main(void){ //pf指向一个函数,该函数的参数是两个 const string 的引用,返回值是 bool 类型 bool (*pf) (const string &, const string &);//未初始化 pf = leng_compare;//pf指向名为 leng_compare 的函数 cout int (*)(int *, int);//使用尾置返回类型 13 14 int main(void){ 15 return 0; 16 }

 

使用 decltype:

当我们明确知道返回的函数是哪一个,就能使用 decltype 简化书写函数指针返回类型的过程,需要注意的是 decltype 返回的不是指针,需要添加 *,这点和数组是一样的:

1 #include 2 using namespace std; 3 4 int gel(int *, int); 5 6 decltype(gel) *lou(int x);//注意这里的*不能落掉 7 8 int main(void){ 9 return 0; 10 }

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3