c语言中函数指针和指针函数

一.什么是函数指针:

  函数指针本质上也是指针,我们所写函数代码在内存中会被分配一段专门的储存空间,这段储存空间的地址就是函数的地址,既然是地址,就可以用指针去表示,自然就有了函数指针。

二.函数指针的用法:

  1.首先明确函数指针怎么申明。形如:返回值类型 (*变量名)(参数类型1,参数类型2,。。。)

  例如

int (*p) (int,int)

  2.我们还需要了解如何通过指针调用函数。

(*p)(3,5);

  

  3.如何给该类型的指针赋值:

  非常简单,直接将函数名赋给指针即可,因为函数名即为函数的首地址,这样的赋值顺理成章。

  例如:

int Func(int x);   /*声明一个函数*/
int (*p) (int x);  /*定义一个函数指针*/
p = Func;          /*将Func函数的首地址赋给指针变量p*/

  4.请看一下完整的用法:

 

# include <stdio.h>
int Max(int, int); 
int main(void)
{
    int(*p)(int, int);  
    int a, b, c;
    p = Max;  
    printf("please enter a and b:");
    scanf("%d%d", &a, &b);
    c = (*p)(a, b);  //通过函数指针调用Max函数
    printf("a = %d\nb = %d\nmax = %d\n", a, b, c);
    return 0;
}
int Max(int x, int y)  
{
    int z;
    if (x > y)
    {
        z = x;
    }
    else
    {
        z = y;
    }
    return z;
}

 5.特别注意:

请一定要分清楚指针函数和函数指针的区别。指针函数是指一个函数的返回值类型为指针。下面请看一段代码来了解指针函数:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
char *InitMemory()  //指针函数
{
    char *s = (char *)malloc(sizeof(char) * 32); 
 
    return s;
}
 
int main()
{
    char *ptr = InitMemory();
    strcpy(ptr, "helloworld");
    printf("%s\n", ptr);
 
    free(ptr);
 
    return 0;
}

 

posted @ 2019-09-14 15:23  ****l****  阅读(3060)  评论(0编辑  收藏  举报