18.c/c++程序员面试宝典-函数指针

原创 2015年11月17日 19:57:45

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()表示的就是一个返回字符型指针的函数。


【答案】函数指针是一个指向函数的指针。它的本质是一个指针,而指针函数只是说明它是一个返回值为指针的函数,它的本质是一个函数。



19.c/c++程序员面试宝典-this指针

19.c/c++程序员面试宝典-this指针

29.c/c++程序员面试宝典-类型转换构造函数

26.c/c++程序员面试宝典-类型换行构造函数

27.c/c++程序员面试宝典-复制构造函数

27.c/c++程序员面试宝典-复制构造函数

32.c/c++程序员面试宝典-类成员函数

32.c/c++程序员面试宝典-类成员函数

31.c/c++程序员面试宝典-函数参数的传递

31.c/c++程序员面试宝典-函数参数的传递

30.c/c++程序员面试宝典-函数的定义

30.c/c++程序员面试宝典-函数的定义

16.c/c++程序员面试宝典-虚函数与纯虚函数

16.c/c++程序员面试宝典-虚函数与纯虚函数

关于程序员面试宝典中5.8节面试例题:编写一个函数,实现把C/C++程序代码中的注释去掉……答案的分析

因为马上要找工作了,所以,没事要看看程序员面试宝典,今天看到第5.8节(P41)程序设计的其他问题,自己思考了一下,然后看了看附带的答案,发现答案都看不太懂(大家都懂看别人的程序,没有注释,会看的很纠...
  • ljjee
  • ljjee
  • 2012年07月16日 16:08
  • 1801

C/C++ 函数指针教程

  • 2010年09月29日 22:40
  • 137KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:18.c/c++程序员面试宝典-函数指针
举报原因:
原因补充:

(最多只允许输入30个字)