概述
18.c/c++程序员面试宝典-函数指针
在程序运行中,函数是程序的算法指令部分,它们和数组一样也占用存储空间,也都有相应的地址。编程者可以使用指针变量指向数组的首地址,同样,也可以使用指针变量指向函数代码的首地址,指向函数代码首地址的指针变量称为函数指针。
面试题89 什么是函数指针?如何使用函数指针***
分析:函数指针就是指向函数的指针。像其他指针一样,函数指针也指向某个特定的类型。函数类型由其返回类型及形参表确定,而与函数名无关。函数指针的示例代码如下:
int (*f)(int x);
double (*ptr)(double x);
由于“()”运算符的优先级高于“*”,所以指针变量名外的括号必不可少,后面的“形参列表”表示指针变量指向的函数所带的参数刘表。函数指针和它指向的函数的参数个数和类型必须一致,函数指针的类型和函数的返回值类型也必须保持一致。
函数指针的使用主要包括函数指针的赋值和通过函数指针调用函数,函数名和数组名一样代表了函数代码的首地址,因此在赋值时,是直接将函数指针指向函数名。函数指针的赋值示例代码如下:
int func(int x); //声明一个函数
int (*f) (int x); //声明一个函数指针
f=func; //将func()函数的首地址赋给指针f
赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此赋值以后,指针f就指向函数func(x)的代码的首地址。
函数指针是通过函数名及有关参数对函数进行调用的。与其他指针变量相类似,如果指针变量pi是指向某整型变量i的指针,则*p等于它所指的变量i;如果pf是指向某浮点型变量f的指针,则*pf就等价于它所指的变量f。同样,如果f是指向函数func(x)的指针,则*f就代表它所指向的函数func。所以在执行了f=func之后,(*f)和func就代表同一个函数。由于函数指针是指向存储区中的某个函数,因此可以通过函数指针调用相应的函数。通过函数指针调用函数的示例代码如下:
main()
{
int f();
int i,a,b;
int (*p)(); //定义函数指针
scanf("%d",&a);
p=f; //给函数指针p赋值,使它指向函数f
for(i=1;i<9;i++)
{
scanf("%d",&b);
a=(*p)(a,b);
}
printf("the max number is:%d",a);
}
f(int x,int y) //定义比较函数
{
int z;
z=(x>y)?x:y;
return (z);
}
上面代码的运行结果如下:
343 -45 4389 4236 1 -534 988 555 789
the max number is:4389
【答案】函数指针就是指向函数的存储空间地址的指针。可以对函数指针进行赋值并且通过函数指针来调用函数。
面试题90 指针函数和函数指针的区别***
分析:函数不仅可以返回整型、字符型等数据类型的数据,还可以返回指针类型的数据,使其指向某个地址单元。返回指针的函数称为指针函数。指针函数的定义示例代码如下:
int *test(x,y);
上面代码中x,y是形式参数,test是函数名,调用函数后会返回一个指向整型数据的地址指针。test(x,y)是函数,它的值是指针。
指针函数可以返回指针值,它的使用示例代码如下:
main()
{
char *ch(char *,char *); //调用函数
char str1[]="i am glad to meet you";
char str2[]="welcom to study c";
printf("%s,ch(str1,str2)");
}
char *ch(char *str1,char *str2) //定义返回指针的函数
{
nt i;
char *p; //定义指针
p=str2;
if(*str2==NULL) exit(-1);
do
{
*str2=*str1;
str1++;
str2++;
}
while(*str1!=NULL);
return(p); //返回指针
}
上面代码中,函数char *ch()表示的就是一个返回字符型指针的函数。
【答案】函数指针是一个指向函数的指针。它的本质是一个指针,而指针函数只是说明它是一个返回值为指针的函数,它的本质是一个函数。
最后
以上就是美丽钢笔为你收集整理的18.c/c++程序员面试宝典-函数指针的全部内容,希望文章能够帮你解决18.c/c++程序员面试宝典-函数指针所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复