C函数指针简单用例

(1)函数指针:
可以指向 一类 固定形参类型和返回值类型 的函数 的指针
声明:
int fun(int, int)
    ||
    \/
int (*pfun)(int, int)

pfun就是函数指针(变量)

调用:

    d = pfun(a, b);
    e = (*pfun)(a, b);

#####指针函数
int *fun(int, int);
int *(fun(int, int));
#####

 

/*ex01.c*/
#include <stdio.h>

int max(int a, int b) {
    return (a > b ? a : b);
}
int min(int a, int b) {
    return (a < b ? a : b);
}

int main(int argc, char *argv[]) {
    int (*pfun)(int, int);
    pfun = max;
    int a = 0, b = 0, c = 0, d = 0, e = 0;
    fscanf(stdin, "%d%d", &a, &b);

    c = max(a, b);
    d = pfun(a, b);
    e = (*pfun)(a, b);
    fprintf(stdout, "%d\n", c);
    fprintf(stdout, "%d\n", d);
    fprintf(stdout, "%d\n", e);
    return 0;
}



(2)定义函数指针的类型 可以声明函数指针变量
typedef int (*Pfun)(int, int);

Pfun就是自定义函数指针类型

Pfun pfun = min;

创建Pfun类型变量pfun并将min函数赋值它

 

/*ex02.c*/
#include <stdio.h>

typedef int (*Pfun)(int, int);

int max(int a, int b) {
    return (a > b ? a : b);
}
int min(int a, int b) {
    return (a < b ? a : b);
}

int main(int argc, char *argv[]) {
    Pfun pfun = min;
    int a = 0, b = 0, c = 0, d = 0, e = 0;
    fscanf(stdin, "%d%d", &a, &b);

    c = min(a, b);
    d = pfun(a, b);
    e = (*pfun)(a, b);
    fprintf(stdout, "%d\n", c);
    fprintf(stdout, "%d\n", d);
    fprintf(stdout, "%d\n", e);
    return 0;
}


(3)可以将函数作为参数传入另一函数
#include <stdio.h>

typedef int (*Pfun)(int, int);

int max(int a, int b) {
    return (a > b ? a : b);
}
int min(int a, int b) {
    return (a < b ? a : b);
}

int dofun(Pfun pfun, int a, int b) {  //用Pfun类型的函数指针变量pfun接收传入的函数
    return pfun(a, b);
}

int main(int argc, char *argv[]) {
    Pfun pfun = min;
    int a = 0, b = 0, c = 0, d = 0, e = 0, f = 0;
    fscanf(stdin, "%d%d", &a, &b);

    c = min(a, b);
    d = pfun(a, b);
    e = (*pfun)(a, b);
    f = dofun(min, a, b);      //将min函数作为参数传入dofun,dofun用相应类型的函数指针接收
    fprintf(stdout, "%d\n", c);
    fprintf(stdout, "%d\n", d);
    fprintf(stdout, "%d\n", e);
    fprintf(stdout, "%d\n", e);
    return 0;
}

posted @ 2014-08-15 14:35  huangshi8421  阅读(329)  评论(0编辑  收藏  举报