本文共 3815 字,大约阅读时间需要 12 分钟。
函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是,只不过该指针变量指向函数。这正如用指针变量可指向、字符型、一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。函数指针有两个用途:调用函数和做函数的参数。
1 2 3 4 5 6 7 8 9 10 11 12 | #include<stdio.h> int max( int x, int y){ return (x>y? x:y);} int main() { int (*ptr)( int , int ); int a, b, c; ptr = max; scanf ( "%d%d" , &a, &b); c = (*ptr)(a,b); printf ( "a=%d, b=%d, max=%d" , a, b, c); return 0; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include<stdio.h> void FileFunc() { printf ( "FileFunc\n" ); } void EditFunc() { printf ( "EditFunc\n" ); } void main() { typedef void (*funcp)(); funcp pfun=FileFunc; pfun(); pfun=EditFunc; pfun(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | //指针函数是指返回值是指针的函数,即本质是一个函数: #include<iostream> using namespace std; int main() { float *find( float (*p)[4],intm); //查询序号为m的学生的四门课程的成绩 float score[][4]={ {50,51,52,55},{70,70,40,80},{77,99,88,67}}; //定义成绩数组,第一维可以为变量 float *pf=NULL; //定义一个指针时一定要初始化 int i,m; cout<< "请输入您想查询的学生的序号:" ; cin>>m; pf=find(score,m); //返回为一维数组指针,指向一个学生成绩 for (i=0;i<4;i++) cout<<*(pf+i)<< "" ; cout<<endl; return 0; } float *find( float (*p)[4],intm) { float *pf=NULL; pf=*(p+m); //p是指向二维数组的指针,加*取一维数组的指针 return pf; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #include <stdio.h> int add1( int a1, int b1); int add2( int a2, int b2); int main( void ) { int numa1 = 1, numb1 = 2; int numa2 = 2, numb2 = 3; int (*op[2])( int a, int b); op[0] = add1; op[1] = add2; printf ( "%d%d\n" , op[0](numa1, numb1), op[1](numa2, numb2)); } int add1( int a1, int b1) { return a1 + b1; } int add2( int a2, int b2) { return a2 + b2; } |
1 | void (*Array[])( void )={Stop,Run,Jump}; |
1 | Array[1](); //执行Run函数 |
1 2 3 4 | typedef void (*iFunc)( void ); //此类型的函数指针指向的是无参、无返回值的函数。 Funcint Array[32]; //定义一个函数指针数组,其每个成员为INTFUN类型的函数指针 Array[10]=INT_TIMER0; //为其赋值 Array[10](); //调用函数指针数组的第11个成员指向的函数 |
转载地址:http://cilws.baihongyu.com/