c++/c 函数指针详解
1 函数指针
今天我们要介绍的是函数指针。内容由以下3部分组成:
① 函数指针的概念,为了面试时能够说出来。
② 函数指针的用法 当然是为工作用到喽
③ 函数指针的实例,用一些练习来加深印象。
④经典面试题:函数指针和指针函数的区别
好 开始!
①函数指针的概念:
1.1 函数指针: 是指向函数的指针变量
在程序运行中,函数是程序算法指令部分,他们和数组一样也占用内存空间,也都有相应的地址。我们程序员可以使用指针变量指向数组的首地址,同样,也可以使用指针变量指向函数代码的首地址, 指向函数代码首地址的指针变量,称为函数指针。
1.2 函数指针有两个用途:调用函数和做函数的参数。
② 函数指针的用法
2.1 用法:返回值类型 ( * 指针变量名) ([形参列表]);
注1:“返回值类型”说明函数的返回类型,“(指针变量名 )”中的括号不能省,括号改变了运算符的优先级。若省略整体则成为一个函数说明,说明了一个返回的数据类型是指针的函数,后面的“形参列表”表示指针变量指向的函数所带的参数列表。例如:
//比较两个string对象的长度
bool lengthCompare(string ch1 , string ch2);
该函数的类型是bool ( string , string ) 。要想声明一个可以指向该函数的指针,只需要替换函数名字即可。
// pf 指向一个函数,该函数的参数是两个 string的引用,返回值是bool类型。
bool (*pf)(string ch1 , string ch2 ); //声明了一个函数指针
注2:函数括号中的形参可有可无,视情况而定。
③ 函数指针的实例
下面的简单例子说明函数指针调用的方法。
#include<stdio.h>
int max(int x,int y){return (x>y? x:y);}
int main()
{
int (*ptr)(int, int);
int a, b, c;
ptr = max;
scanf("%d%d", &a, &b);
c = (*ptr)(a,b);
printf("a=%d, b=%d, max=%d", a, b, c);
return 0;
}
输入5 , 2 结果如下:
此外 在上个例子中
ptr = max ; 也可以写成 ptr = & max ;
等价的赋值语句,取地址符是可选的。
此外,我们还能直接使用指向函数的指针来调用该函数,无需提前解引用指针。
int d1 = ptr( 1 , 2 ); //调用max函数
int d2 = (*ptr)( 1 , 2 );//一个等价的调用
int d3 = max(1 , 2 ); //另一个等价的调用
④函数指针和指针函数的区别
关键考点:
指针函数的概念;
指针函数的使用。
考题分析:
函数不仅可以返回整型,字符型等数据类型的数据,还可以返回指针类型的数据,使其指向某个地址单元,返回指针的函数称为指针函数,指针函数的定义示例代码如下.
int &test(x,y);
上面代码中 x ,y 是形式参数,test()是函数名,调用函数后会返回一个指向整型数据的地址指针。test(x,y) 是函数,他的值是指针。
使用代码如下:
#include<stdio.h>
char *ch(char *str1 ,char *str2)
{
int i;
char *p;
p = str2;
if(*str2 == NULL)
{
printf("cuocuocuo");
}
do
{
*str2 = *str1;
str1++;
str2++;
}while (*str1!=NULL);
return p;
}
int main()
{
char *ch(char *, char *); //调用函数
char str1[] = "HELLO";
char str2[] = "123456789";
printf("%s",ch(str1,str2));//打印结果
}
结果输出 ” HELLO6789”
上面代码,函数char *ch()表示的就是一个返回字符型指针的函数。
答案:函数指针是一个指向函数的指针。他的本质是一个指针,而指针函数只是说明他是一个返回值为指针的函数,它本质是一个函数,
推荐阅读
-
c++/c 函数指针详解
-
ca71a_c++_指向函数的指针_通过指针调用函数txwtech
-
C语言 -- 指针与函数及指向函数的指针
-
C/C++函数指针和函数指针数组的定义及用法
-
ca65a_c++_类的成员函数_txwtech_this指针
-
C/C++语言之通过定义指针函数方式来实现在一个cpp文件里面获取另外一个cpp文件函数的返回值
-
VS2017学习C++问题—(如何在一个源文件中调用另一个源文件的函数)
-
main输入参数的含义和介绍 博客分类: C/C++语言 互联网main函数参数问题
-
P1149火柴棒等式-C++编程解析-函数
-
PAT乙级真题1075 || 链表元素分类(详解,C/C++示例,测试点分析)