c语言中函数指针与指针函数的区别

原创 2015年07月06日 22:14:53

今天面试被问到指针函数和函数指针的区别,然并卵,大学学完都还给老师了,今天回来重新看了一遍,整理出来,供大家参考!


1.指针函数:一个返回值是指针的函数。

例如:由于指针一般指的都是地址,地址为int型,所以int *fp(参数)即为一个指针函数。在main 函数中调用时步骤如下 :int *p=NULL; p=fp(参数);


2.函数指针:一个指向函数的指针。

例如:由于函数名即为指针,所以 void (*fp)( )即为一个函数指针,在main函数中的用法如下:


void   fft( );

 void (*fp)( );

main( )

{

     fp=fft;

    (*fp)( );//可以通过fp执行fft( )函数

}


3.指针的指针:一个指向指针的指针。

例如: char c='B' ; char *p=&c; char **fp=&p;

它的用处是允许被调用函数修改局部指针变量和处理指针数组。

void FindCredit(int **);  

main() 

{

  int vals[]={7,6,5,-4,3,2,1,0}; 

int *fp=vals; 

FindCredit(&fp); 

printf("%d\n",*fp);

 } 

void FindCredit(int ** fpp)

 { 

while(**fpp!=0)

{

  if(**fpp<0) break; 

else (*fpp)++;  //通过改变*fpp的值,找到数组中的负值。

}

}

语句(*fpp)++就是对形参指针指向的指针进行自增运算的。但是因为*运算符和++运算符都是单目运算符,按从右到左的原则,++的优先级高于*的,所以圆括号在这里是必须的,如果没有圆括号,那么++运算符将作用于二重指针fpp上。


4.指针数组的指针:一个指向指针数组的指针。

例如:指针数据的元素是指针,通过指针数组的指针,可以访问指针数组。一种常见用法是处理字符串

char *Names[]=  { 

"Bill",  "Sam", 

"Jim",  "Paul", 

"Charles",  0 

};  

main()  {

 char **nm=Names;

 while(*nm!=0)

 printf("%s\n",*nm++); 

}

 先用字符型指针数组Names的地址来初始化指针nm。每次printf()的调用都首先传递指针nm指向的字符型指针,然后nm进行自增运算使其指 向数组的下一个元素(还是指针)。注意完成上述认为的语法为*nm++,它首先取得指针指向的内容,然后使指针自增。


PS:注意文章中标红的部分,有人会有疑问为什么前者要用括号,而后者不用括号呢!

这是因为对于前者的指针fpp来说,它初始化的是指向数组首地址的指针,要想访问数组的下一个元素,是对fp指向的地址中的内容(它是一个指针)进行自增运算,即(*fpp)++;

后者的指针fpp,它初始化的是指针数组的首地址,要想访问数组的下一个元素,直接对fpp进行自增运算,不需要加圆括号






相关文章推荐

C语言-函数指针与函数名的区别

记得大学时老师曾说函数的函数名是函数的入口的指针,之前看block通过clang编译生成的C代码发现很多函数指针,于是想了解函数指针与函数名有什么区别?以及函数指针一般都有些什么作用。 函数指针与函...

C语言函数指针

  • 2012年10月07日 13:19
  • 15KB
  • 下载

C语言函数指针

  • 2013年07月14日 23:23
  • 25KB
  • 下载

C语言 命令行参数 函数指针 gdb调试 .

作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21551397 | http://www.hanshuli...

C语言函数指针.doc

  • 2015年08月04日 11:36
  • 35KB
  • 下载

c语言函数指针

  • 2015年10月10日 09:15
  • 33KB
  • 下载

c语言 函数指针

彻底搞定C指针-函数名与函数指针(2005-10-14 23:35:00) 【收藏】 【评论】 【打印】 【关闭】  函数名与函数指针 一 通常的函数调用     一个通常的函数调...

C语言函数指针,结构体阶段总结

1.数组与函数 1)        数组元素作参数 large(int x, int y){...}; large(a[2], a[3]);   2)        数组名作参数 计算...

C语言 函数指针

c语言 函数指针
  • loucyin
  • loucyin
  • 2016年04月02日 15:02
  • 302

C语言函数指针基础

原文链接:  Dennis Kubes 译文链接: http://blog.jobbole.com/44639/            本文写的非常详细,因为我想为初学者建立一个...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c语言中函数指针与指针函数的区别
举报原因:
原因补充:

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