函数指针

  • 2021 年 1 月 20 日
  • 笔记

1,明确相关概念

a,指针函数:一个函数,只是返回值是一个指针,eg: int *add(int a ,int b)

b,函数名就是整个函数里面代码的首地址

int add(int a,int b)

{

  printf(“%d\n”,a);

  print(“%d\n”,b);

  return a + b;

}

add 函数名就是整个函数add的首地址,就是三条语句的首地址,等于printf(“%d\n”,a);的首地址

2,函数指针概念:本质是一种程序员自己定义的数据类型(跟int,结构体数据类型一样),它保存着一个函数的地址

3,函数指针数据类型声明的语法:(不会分配内存,大型程序写于头文件)

  语法: 返回值数据类型(*函数指针名)(形参表)

  eg:int (*pfunc)(int a,int b);//pfunc就是一种数据类型,当成int类型来用

  or eg:typedef int (*pfunc_t)(int a,int b);//对函数指针取别名pfunc_t(建议方法)

4,函数指针变量定义语法格式:函数指针名 函数指针变量;

  eg:pfunc_t pfunc;//pfunc就是一个函数指针变量,将来保存函数地址

5,函数指针变量初始化

  pfunc_t pfunc = add;//定义、初始化函数指针变量,指向add

6,通过函数指针变量来访问指向的函数,通过函数指针变量调用指向的函数

  语法:函数指针变量名(实参表);

 //实例:

#includ<stdio.h>

typedef (*pfunc_t)(int a,int b);

int add(int a,int b)//定义加法函数

{

  return a + b;

}

int sub(int a,int b)//定义减法函数

{

  return a -b;

}

void main(void)

{

  int ret = 0;

  pfunc_t pfunc = NULL;//定义函数指针变量且初始化为空

  pfunc = add;//把add函数的地址保存于函数指针变量pfunc

  ret = pfunc(100,200);调用add函数

  printf(“a + b = %d\n”,ret);

  func = sub;///把sub函数的地址保存于函数指针变量pfunc

  ret = pfunc(100,200);//调用sub函数

  printf(“a + b = %d\n”,ret);

}