C/C++学习笔记

您所在的位置:网站首页 函数指针的定义和调用 C/C++学习笔记

C/C++学习笔记

2024-07-11 05:55| 来源: 网络整理| 查看: 265

函数指针 函数类型

通过什么来区分两个不同的函数? 一个函数在编译时被分配一个入口地址,这个地址就称为函数的指针,函数名代表函数的入口地址。 函数三要素: 名称、参数、返回值。C语言中的函数有自己特定的类型。 c语言中通过typedef为函数类型重命名:

typedef int f(int, int); // f 为函数类型 typedef void p(int); // p 为函数类型

这一点和数组一样,因此我们可以用一个指针变量来存放这个入口地址,然后通过该指针变量调用函数。 注意:通过函数类型定义的变量是不能够直接执行,因为没有函数体。只能通过类型定义一个函数指针指向某一个具体函数,才能调用。

typedef int(p)(int, int); void my_func(int a,int b){ printf("%d %d\n",a,b); } void test(){ p p1; //p1(10,20); //错误,不能直接调用,只描述了函数类型,但是并没有定义函数体,没有函数体无法调用 p* p2 = my_func; p2(10,20); //正确,指向有函数体的函数入口地址 } 函数指针(指向函数的指针) 函数指针定义方式(先定义函数类型,根据类型定义指针变量);先定义函数指针类型,根据类型定义指针变量;直接定义函数指针变量; int my_func(int a,int b){ printf("ret:%d\n", a + b); return 0; } //1. 先定义函数类型,通过类型定义指针 void test01(){ typedef int(FUNC_TYPE)(int, int); FUNC_TYPE* f = my_func; //如何调用? (*f)(10, 20); f(10, 20); } //2. 定义函数指针类型 void test02(){ typedef int(*FUNC_POINTER)(int, int); FUNC_POINTER f = my_func; //如何调用? (*f)(10, 20); f(10, 20); } //3. 直接定义函数指针变量 void test03(){ int(*f)(int, int) = my_func; //如何调用? (*f)(10, 20); f(10, 20); } 函数指针数组

函数指针数组,每个元素都是函数指针。

void func01(int a){ printf("func01:%d\n",a); } void func02(int a){ printf("func02:%d\n", a); } void func03(int a){ printf("func03:%d\n", a); } void test(){ #if 0 //定义函数指针 void(*func_array[])(int) = { func01, func02, func03 }; #else void(*func_array[3])(int); func_array[0] = func01; func_array[1] = func02; func_array[2] = func03; #endif for (int i = 0; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3