函数名与函数指针.docVIP

  • 5
  • 0
  • 约5.07千字
  • 约 5页
  • 2015-09-06 发布于重庆
  • 举报
函数名与函数指针,函数名是指针吗,函数指针函数名,函数名和函数指针,函数名是指针,函数指针和函数名转换,函数名后加const,函数名,函数名作为参数,python获取函数名

函数名与函数指针 一 通常的函数调用 一个通常的函数调用的例子: //自行包含头文件 void MyFun(int x); //此处的声明也可写成:void MyFun( int ); int main(int argc, char* argv[]) { MyFun(10); //这里是调用MyFun(10);函数 return 0; } void MyFun(int x) //这里定义一个MyFun函数 { printf(“%d\n”,x); } 这个MyFun函数是一个无返回值的函数,它并不完成什么事情。这种调用函数的格式你应该是很熟悉的吧!看主函数中调用MyFun函数的书写格式:MyFun(10); 我们一开始只是从功能上或者说从数学意义上理解MyFun这个函数,知道MyFun函数名代表的是一个功能(或是说一段代码)。 直到?? 学习到函数指针概念时。我才不得不在思考:函数名到底又是什么东西呢? (不要以为这是没有什么意义的事噢!呵呵,继续往下看你就知道了。) 二 函数指针变量的声明 就象某一数据变量的内存地址可以存储在相应的指针变量中一样,函数的首地址也以存储在某个函数指针变量里的。这样,我就可以通过这个函数指针变量来调用所指向的函数了。 在C系列语言中,任何一个变量,总是要先声明,之后才能使用的。那么,函数指针变量也应该要先声明吧?那又是如何来声明呢?以上面的例子为例,我来声明一个可以指向MyFun函数的函数指针变量FunP。下面就是声明FunP变量的方法: void (*FunP)(int) ; //也可写成void (*FunP)(int x); 你看,整个函数指针变量的声明格式如同函数MyFun的声明处一样,只不过??我们把MyFun改成(*FunP)而已,这样就有了一个能指向MyFun函数的指针FunP了。(当然,这个FunP指针变量也可以指向所有其它具有相同参数及返回值的函数了。) 三 通过函数指针变量调用函数 有了FunP指针变量后,我们就可以对它赋值指向MyFun,然后通过FunP来调用MyFun函数了。看我如何通过FunP指针变量来调用MyFun函数的: //自行包含头文件 void MyFun(int x); //这个声明也可写成:void MyFun( int ); void (*FunP)(int ); //也可声明成void(*FunP)(int x),但习惯上一般不这样。 int main(int argc, char* argv[]) { MyFun(10); //这是直接调用MyFun函数 FunP=MyFun; //将MyFun函数的地址赋给FunP变量 (*FunP)(20); //这是通过函数指针变量FunP来调用MyFun函数的。 } void MyFun(int x) //这里定义一个MyFun函数 { printf(“%d\n”,x); } 请看黑体字部分的代码及注释。 运行看看。嗯,不错,程序运行得很好。 哦,我的感觉是:MyFun与FunP的类型关系类似于int 与int *的关系。函数MyFun好像是一个如int的变量(或常量),而FunP则像一个如int *一样的指针变量。 int i,*pi; pi=i; //与FunP=MyFun比较。 (你的感觉呢?) 呵呵,其实不然?? 四 调用函数的其它书写格式 函数指针也可如下使用,来完成同样的事情: 代码之一: //自行包含头文件 void MyFun(int x); void (*FunP)(int ); //声明一个用以指向同样参数,返回值函数的指针变量。 int main(int argc, char* argv[]) { MyFun(10); //这里是调用MyFun(10);函数 FunP=MyFun; //将MyFun函数的地址赋给FunP变量 FunP(20); //这是通过函数指针变量来调用MyFun函数的。 return 0; } 代码之二: void MyFun(int x) //这里定义一个MyFun函数 { printf(“%d\n”,x); } 我改了黑体字部分(请自行与之前的代码比较一下)。 运行试试,啊!一样地成功。 咦?FunP=MyFun; 可以这样将MyFun值同赋值给FunP,难道MyFun与FunP是同一数据类型(即如同的int 与int的关系)

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档