首页 > 其他分享 >函数指针和函数指针类型

函数指针和函数指针类型

时间:2022-11-09 18:24:04浏览次数:64  
标签:函数 指向 int max 类型 函数指针 指针

函数指针

1.     定义

每一个函数都占用一段内存单元,它们有一个起始地址,指向函数入口地址的指针称为函数指针。

注意:函数指针的本质是一个指针变量,且指针指向的函数的入口地址

2.     语法

指向函数的指针变量的一般定义形式为:

       数据类型   (*指针变量名)   (参数表);

3.     说明

  • 函数指针定义形式中的数据类型是指函数的返回值的类型。
  • 区分下面两个语句:
int (*p)(int a, int b);  //p是一个指向函数的指针变量,函数返回类型为整型 int *p(int a, int b);     //p是函数名,函数返回类型为整型指针
  • 函数指针指向的变量不是固定的某一个函数的,只是定义了一个变量专门用来存放函数的入口地址的;在程序中把哪一个函数的地址赋给它,它就指向哪一个函数。
  • 在给函数指针变量赋值时,只需给出函数名,而不必给出参数。
int max(int x, int y) { return x+y; }   void main() { //定义一个函数指针 int (*p)(int a, int b); p = max; //正确 p = &max; //正确     //通过函数指针定义变量 p(1,2); //正确 (*p)(1,2); //同样正确 }  
  • 在一个程序中,指针变量p可以先后指向不同的函数,但一个函数不能赋给一个不一致的函数指针(即不能让一个函数指针指向与其类型不一致的函数)。
int fn1(int x, int y);  int fn2(int x);     //定义如下的函数指针: int (*p1)(int a, int b); int (*p2)(int a);     p1 = fn1; //正确 p2 = fn2; //正确 p1 = fn2; //产生编译错误  
  • 函数指针只能指向函数的入口处,而不可能指向函数中间的某一条指令。不能用*(p+1)来表示函数的下一条指令。
  • 函数指针变量常用的用途之一是把指针作为参数传递到其他函数。

4.     举例

源代码:

#include <iostream> #include <conio.h> using namespace std;     int max(int x, int y); //求最大数 int min(int x, int y); //求最小数 int add(int x, int y); //求和 void process(int i, int j, int (*p)(int a, int b)); //应用函数指针   int main() { int x, y; cin>>x>>y; cout<<"Max is: "; process(x, y, max);     cout<<"Min is: "; process(x, y, min);   cout<<"Add is: "; process(x, y, add); getch(); return 0; }     int max(int x, int y) { return x > y ? x : y; }     int min(int x, int y) { return x > y ? y : x; }     int add(int x, int y) { return x + y; }     void process(int i, int j, int (*p)(int a, int b)) { cout<<p(i, j)<<endl; }

函数指针类型

通过typedef定义函数指针类型

int max(int x, int y) { return x > y ? x : y; }   //定义函数指针类型 typedef int(*pFun)(int, int)   int main() { //通过函数指针类型定义函数指针 pFun fun = &max; fun(1,2); return 0; }

标签:函数,指向,int,max,类型,函数指针,指针
From: https://www.cnblogs.com/lidabo/p/16874736.html

相关文章