区分C语言中的指针函数和函数指针

1.指针函数:

类型说明符 *函数名(形参表)

{

 ..........   /*函数体*/

   ..........     /*函数体*/

}

其中函数名之前加了"*"号表明,这是一个指针型函数

2.函数指针:

类型说明符 (*指针变量名)();

例如:int (*pf)(int );

3.指针函数:例子

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
/*
char *day_name(int n);
int main()
{
    int i;
    char *day_name(int n);//定义函数返回值是指针类型的函数
    printf("input Day No:\n");
    scanf("%d",&i);
    if(i < 0 ) exit(1);
    printf("Day No:%2d-->%s\n",i,day_name(i));//调用指针函数
    return 0;
}
char *day_name(int n){
    //静态指针数组
    static char *name[] = {
        "Illegal day",
        "Monday",
        "Tuesday",
        "Wednesday",
        "Thursday",
        "Friday",
        "Saturday",
        "Sunday"
    };
    return((n <1 || n>7 )? name[0]:name[n]);
}
*/
char *day_name(char *name[],int n)
{
    char *pp1,*pp2;
    pp1 = *name;
    pp2 = *(name + n);
    return ((n<1 || n>7)? pp1:pp2);
}
int main()
{
        static char *name[] = {
        "Illegal day",
        "Monday",
        "Tuesday",
        "Wednesday",
        "Thursday",
        "Friday",
        "Saturday",
        "Sunday"
    };
    char *ps;
    int i;
    char *day_name(char *name[],int n);
    printf("input Day No:\n");
    scanf("%d",&i);
    if(i < 0) exit(1);
    ps = day_name(name,i);
    printf("Day No:%2d-->%s\n",i,ps);
    return 0;
}

4.函数指针:例子

int max(int a,int b)
{ 
    if(a>b)return a; 
    else return b;
}
main()
{ 
    int max(int a,int b); 
    int(*pmax)(int, int);//定义参数列表为(int,int)的函数指针
    int x,y,z;
     pmax=max;//将函数指针pmax ->指向函数max 的函数入口地址(首地址)
     printf("input two numbers:\n"); 
     
    scanf("%d%d",&x,&y); 
     
    z=(*pmax)(x,y); //等同于调用函数max(x,y);
     
    printf("maxmum=%d",z); 
}

5.总结

函数指针,是一种指针,指针指向的是函数的首地址,指向的类型是函数。

指针函数,是一种函数,函数的返回值类型是指针类型的函数。

猜你喜欢

转载自www.cnblogs.com/liusanjian/p/11689684.html
今日推荐