首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

函数指针类型不能用于函数原型

函数指针类型是一种特殊的指针类型,它可以指向函数的地址。函数指针类型不能用于函数原型,是因为函数原型需要指定函数的参数类型和返回值类型,而函数指针类型只能表示函数的地址,无法包含参数和返回值的信息。

函数指针类型在C语言中非常常见,它可以用于实现回调函数、动态加载库函数等功能。通过函数指针,我们可以将函数作为参数传递给其他函数,实现灵活的函数调用。

在C语言中,定义函数指针类型的语法如下:

代码语言:txt
复制
typedef 返回值类型 (*函数指针类型名)(参数类型1, 参数类型2, ...);

其中,返回值类型是函数的返回值类型,参数类型1、参数类型2等是函数的参数类型。通过typedef关键字,我们可以给函数指针类型起一个别名,方便后续使用。

函数指针类型的应用场景非常广泛,例如:

  1. 回调函数:将函数指针作为参数传递给其他函数,在特定的条件下调用该函数,实现回调功能。
  2. 动态加载库函数:通过函数指针,可以在运行时动态加载库函数,实现灵活的函数调用。
  3. 函数指针数组:可以使用函数指针数组来实现函数的分发和调用。
  4. 函数指针作为结构体成员:可以将函数指针作为结构体的成员,实现结构体的方法。

腾讯云提供了一系列云计算相关的产品,包括云服务器、云数据库、云存储、人工智能等。具体推荐的产品和产品介绍链接地址如下:

  1. 云服务器(ECS):提供弹性计算能力,支持多种操作系统和应用场景。了解更多:腾讯云云服务器
  2. 云数据库(CDB):提供高可用、可扩展的数据库服务,支持多种数据库引擎。了解更多:腾讯云云数据库
  3. 云存储(COS):提供安全、可靠的对象存储服务,适用于图片、音视频、文档等各种类型的数据存储。了解更多:腾讯云云存储
  4. 人工智能(AI):提供丰富的人工智能服务,包括图像识别、语音识别、自然语言处理等。了解更多:腾讯云人工智能

以上是关于函数指针类型不能用于函数原型的完善且全面的答案,希望能对您有所帮助。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【C++】函数指针 ① ( 函数三要素 | 函数类型 | 函数指针类型 | 函数类型重命名 )

一、函数类型函数指针类型 1、函数三要素 函数原型有三个重要要素 : 函数名称 : 使用 标识符 为函数命名 ; 用来标识函数的名称 , 要求符合标识符的命名规则 , 并且要有意义 ; 参数列表...和 个数 共同决定 ; 函数类型示例 : 下面的函数类型 表示的函数 , 返回值为空 , 参数为 int 类型的 ; void (int) 3、函数指针类型 函数指针类型 是指指向函数指针变量的类型...; 每个函数都有一个入口地址 , 这个地址是一个指针 , 指向函数的代码块在内存中的位置 ; 函数指针变量就是用来存储这个入口地址的变量 , 函数指针变量的类型需要与被调用的函数类型匹配 , 即函数指针类型应该与被调用的函数的返回值类型和参数列表类型一致...; 函数指针类型示例 : 下面的函数指针类型 表示的函数 , 返回值为空 , 参数为 int 类型的 ; void (*)(int) 4、函数类型重命名 在 C 语言中 , 可以使用 typedef..., 通过这两个类型变量调用函数 ; typedef void func(int); 代码用于 声明一个 函数类型 ; typedef void (*func_ptr)(int); 代码用于 声明一个 函数指针类型

40650

【C++】函数重载 ④ ( 函数指针定义的三种方式 | 直接定义函数指针 | 通过 函数类型 定义 函数指针 | 通过 函数指针类型 定义 函数指针 )

的 返回值 不是 " 函数重载 " 的 判断标准 ; 二义性 : 如果 函数重载 与 默认参数 结合使用 , 出现了二义性 , 编译直接失败 ; 函数指针赋值重载函数 : 根据 函数指针 类型中的 参数列表类型..., 定义函数指针 , 直接根据指针的定义语法 指针类型* 指针名称 定义函数指针 , 同时将 add 函数 的 地址 赋值给 函数指针 ; // 根据 函数类型 定义 函数指针 func* func1...= add; 3、通过 函数指针类型 定义 函数指针 首先 , 通过 typedef 关键字, 定义 函数指针 类型 , 类型名称为 func_ptr , 对应的函数的 参数列表是 2 个 int 参数...); 然后 , 通过 func_ptr 函数指针类型 , 定义 函数指针 , 直接使用 变量类型 变量名称 的方式定义 函数指针 ; // 根据 函数指针类型 定义 函数指针 func_ptr func2...函数类型 定义 函数指针 func* func1 = add; // 根据 函数指针类型 定义 函数指针 func_ptr func2 = add; // 直接定义 函数指针 int (*

18130
  • 【C++】函数指针 ③ ( 函数指针语法 | 函数名直接调用函数 | 定义函数指针变量 | 使用 typedef 定义函数类型 | 使用 typedef 定义函数指针类型 )

    , int) 函数类型指针 , 将 add 函数名 ( 函数地址 ) 直接 赋值给 函数指针 , 可以直接通过函数指针调用函数 ; 下面的代码中 , 定义了函数指针 p , 指向 int(int,...int) 类型函数 , 将 add 函数地址 赋值给 函数指针 p , 之后通过 函数指针 p 调用 add 函数 ; 代码如下 : // 声明一个 int(int, int) 类型指针变量 /...func_add // 使用时需要使用该类型指针调用函数 typedef int fun_add(int, int); 使用定义的 函数类型 调用函数 : 定义函数类型指针类型 func_add...pFun_add)(int, int); 使用定义的 函数指针类型 调用函数 : 定义函数指针类型 pFun_add 的 变量 , 然后 将 add 函数地址 赋值给 该变量 , 然后 通过 函数指针变量..., int) 类型函数类型 // 该指针 指向 函数地址 int(*p)(int, int) = add; // 通过函数指针调用 函数 p(3, 4); // 定义函数指针类型变量

    45960

    【C++】函数重载 ④ ( 函数指针定义的三种方式 | 直接定义函数指针 | 通过 函数类型 定义 函数指针 | 通过 函数指针类型 定义 函数指针 )

    的 返回值 不是 " 函数重载 " 的 判断标准 ; 二义性 : 如果 函数重载 与 默认参数 结合使用 , 出现了二义性 , 编译直接失败 ; 函数指针赋值重载函数 : 根据 函数指针 类型中的 参数列表类型..., 定义函数指针 , 直接根据指针的定义语法 指针类型* 指针名称 定义函数指针 , 同时将 add 函数 的 地址 赋值给 函数指针 ; // 根据 函数类型 定义 函数指针 func* func1...= add; 3、通过 函数指针类型 定义 函数指针 首先 , 通过 typedef 关键字, 定义 函数指针 类型 , 类型名称为 func_ptr , 对应的函数的 参数列表是 2 个 int 参数...); 然后 , 通过 func_ptr 函数指针类型 , 定义 函数指针 , 直接使用 变量类型 变量名称 的方式定义 函数指针 ; // 根据 函数指针类型 定义 函数指针 func_ptr func2...函数类型 定义 函数指针 func* func1 = add; // 根据 函数指针类型 定义 函数指针 func_ptr func2 = add; // 直接定义 函数指针 int (*

    17930

    【C++】函数指针 ④ ( 函数指针函数参数 | 使用函数指针间接调用函数 | 函数指针做参数 | 函数指针类型的本质 | 函数指针做参数意义 )

    一、函数指针函数参数 1、使用函数指针间接调用函数 在上一篇博客 【C++】函数指针 ③ ( 函数指针语法 | 函数名直接调用函数 | 定义函数指针变量 | 使用 typedef 定义函数类型 | 使用...typedef 定义函数指针类型 ) 中 , 最后一个示例 , 使用 typedef 定义函数指针类型 如下 : // int (int, int) 函数指针类型重命名为 pFun_add // 该类型变量可以直接接收..., 调用的函数可以动态指定 ; 2、函数指针做参数 定义了 如下 函数指针类型 pFun_add , 其类型为 int (*)(int, int) , 该指针指向一个 类型为 int (int, int..., int); 定义函数 接收 pFun_add 类型的形参作为参数 , 该类型函数指针类型 , 也就是 函数接收一个 函数指针类型参数 , 在该函数中调用 函数指针 指向的 函数 ; // 传入函数指针...函数名 ( 函数地址 ) 作为 函数指针 参数 // 传递给函数 caculate(add, 11, 12); 3、函数指针类型的本质 函数指针类型 本质 : 提前对任务 格式 进行约定 ; 函数参数类型

    97750

    C语言指针函数参数,指针函数返回类型

    这就意味着,两种形式都不能将数组的所有元素“一股脑”传递进来,大家还得规规矩矩使用数组指针。*/ //真正传递的数组可以有少于或多于 100 个的元素。...指针函数返回类型: 程序编译后,每个函数都有执行第一条指令的地址即首地址,称[函数指针函数指针即指向函数指针变量,要间接调用函数可以使用指针变量来实现。...int (*pf)(int, int); 通过将pf与括号中的“*”强制组合组合在一起,表示定义的pf是一个指针,然后与下面的“()”再次组合,表示的是该指针指向一个函数,括号里表示为int类型的参数,...#include #include char *strs(char *strl1, char *strl2);//声明一个char*类型指针函数 int main...: 分析函数指针变量不能进行算术运算,这是与数组指针变量不同的。

    2.6K20

    指针函数函数指针区别

    函数指针 1.1 定义 函数指针是指向函数指针。它存储了函数的地址,允许在运行时动态地选择要调用的函数函数指针允许在代码中间接地调用不同的函数。它是一个指针,可以指向函数,并用于调用该函数。...int (*add)(int, int); // 定义一个指向参数为两个整数、返回类型为整数的函数指针 void (*func)(void); // 定义一个指向无参数、无返回值的函数指针...指针函数 2.1 定义 指针函数指的是一个函数,其返回类型是一个指针。这种函数返回一个指针值,而不是基本类型的值。指针函数本身是函数,其返回值是一个指针。...指针函数定义: 类型名 * 函数名(参数列表); 2.2 示例1 int* createArray() { static int array[] = {1, 2, 3, 4, 5};...两者区别 函数指针是指向函数指针,允许在运行时选择调用的函数指针函数是一个函数,其返回类型是一个指针,它返回指针值而不是基本类型的值。

    13110

    指针函数函数指针「建议收藏」

    很多人因为搞不清这两个概念,干脆就避而远之,我刚接触C语言的时候对这两个概念也比较模糊,特别是当指针函数函数指针函数指针变量、函数指针数组放在一块的时候,能把强迫症的人活活逼疯。...指针函数 指针函数: 顾名思义,它的本质是一个函数,不过它的返回值是一个指针。...函数指针指针函数不同,函数指针 的本质是一个指针,该指针的地址指向了一个函数,所以它是指向函数指针。...回调函数 函数指针的一个非常典型的应用就是回调函数。 什么是回调函数? 回调函数就是一个通过指针函数调用的函数。其将函数指针作为一个参数,传递给另一个函数。...以上代码的输出结果如下: 回调函数广泛用于开发场景中,比如信号函数、线程函数等,都使用到了回调函数的知识。

    50920

    C语言(函数指针指针函数

    函数指针指针函数 ③ 数组指针指针数组 还有个找抽的:⑤ 函数指针数组 经翻阅小学五年级语文课本得知,一个短语中的最后部分,是这个短语的中语,其余部分是定语(修饰语)。...也就是说,以上短语相当于: ① 指向函数指针 ② 返回指针函数 ③ 指向数组的指针 ④ 放了很多指针的数组 ⑤ 放了很多指向函数指针的数组 ? 语文课上完了,然鹅,没用!...你不能在源码里写这些中文,我们需要将它们表达为代码。...p = &func // 让 p 指向函数 func ② 指针函数 func char * func(int, float); // 一个返回指针函数 ③ 数组指针 q int num[10]; /...char* 指针的数组 ⑤ 函数指针数组 fs void func(double, int); // 一个普通函数 void (*fs[3])(double, int); // 一个存放了 3 个指向以上函数指针的数组

    1.7K20

    详解C语言指针函数函数指针函数指针数组「建议收藏」

    而在指针中,指针函数函数指针指针函数数组、函数指针数组、指向函数指针数组的指针等等概念看着又绕又头疼。本问总结了一下以上一些概念以及用法,并给出例程深化理解。 1....指针函数 指针函数就是返回指针值的函数,本质是一个函数。所以指针函数等价于“返回值为指针函数”。...函数指针 函数指针就是一个指向函数指针。每个函数在编译时,会被分配一个入口地址,一般用函数名来表示,这个地址就是该函数指针。...函数指针数组 顾名思义,就是每个元素都是函数指针的数组,直接在函数指针名后面加上数组符号[ ]即可。...C语言函数不可以定义为数组,只能通过函数指针来操作定义函数指针数组。 5.

    1.7K20

    C++函数指针指针函数、返回值为函数指针函数浅谈

    例如int (*add)(int, int);定义了一个函数指针add,用于指向返回值为int,并且有两个int参数的函数,下面用实例来说明 /** * 作者:lyn * 时间:2018.10.30...例如A *createA();声明了一个返回值为指向A类型指针的,参数列表为空的函数(这句话读起来可能有一··绕口),实例说明 /** * 作者:lyn * 时间:2018.10.30 * 该程序用来演示指针函数...A的指针函数 A *createA() { return new A(1); } int main(){ //创建一个指向A类型指针,并调用createA创建一个A...类型的对象 A* b = createA(); //通过指针调用类的方法 cout a = " getA() << endl;...(void (*f)()))() 我们把例子从里往外看 void (*f)()是一个函数指针,它用于指向一个返回值为void,无参数列表的函数 * set_malloc_handler(void (

    1.6K10

    CC++函数指针指针函数

    int *p=max;指针定义错误,改为:int (*p)(int ,int)=max; 解析:函数指针不能直接赋值给int型指针. scanf("%d %d %d",a,b,c);库函数使用错误,...d=p(p(a,b),c);函数指针调用函数错误,改为d=(*p)((*p)(a,b),c);` 解析:用函数指针调用函数的格式如下:(【*】【函数指针名称】)(【参数列表】);不能直接用函数指针加上参数就直接调用...指针函数定义:指针函数的落脚点是一个函数,这个函数的返回值是一个指针,与普通函数int function(int,int)类似,只是返回的数据类型不一样而已。...指针函数的调用 在调用指针函数时,需要一个同类型指针来接收其函数的返回值。...返回类型可以是任何基本类型和复合类型。返回指针函数的用途十分广泛。 事实上,每一个函数,即使它不带有返回某种类型指针,它本身都有一个入口地址,该地址相当于一个指针

    94210

    CC++函数指针指针函数

    int *p=max;指针定义错误,改为: int (*p)(int ,int)=max; 解析:函数指针不能直接赋值给int型指针. scanf("%d %d %d",a,b,c);库函数使用错误...d=p(p(a,b),c);函数指针调用函数错误,改为 d=(*p)((*p)(a,b),c);` 解析:用函数指针调用函数的格式如下:(【*】【函数指针名称】)(【参数列表】);不能直接用函数指针加上参数就直接调用...指针函数定义:指针函数的落脚点是一个函数,这个函数的返回值是一个指针,与普通函数int function(int,int)类似,只是返回的数据类型不一样而已。...指针函数的调用 在调用指针函数时,需要一个同类型指针来接收其函数的返回值。...返回类型可以是任何基本类型和复合类型。返回指针函数的用途十分广泛。 事实上,每一个函数,即使它不带有返回某种类型指针,它本身都有一个入口地址,该地址相当于一个指针

    2.3K01

    函数指针指针函数的学习小结

    (3) f是10个元素构成的数组, 每个元素是指针, 指针指向的是函数, 函数类型为无参数且返回值为double. 下面要讲的窍门的例子跟这个很类似....即数组a的元素是指向函数指针。 指向的是什么类型函数?这很明显,是入参为int、返回值为char的类型函数。 至此解析完毕。 按上述方法,再复杂的也可以一步步解析出来。...,实际上就是返回一个地址给调用函数,以用于需要指针或地址的表达式中。...二、函数指针 指向函数指针包含了函数的地址,可以通过它来调用函数。声明格式如下: 类型说明符 (*函数名)(参数) 其实这里不能称为函数名,应该叫做指针的变量名。...如果没有圆括号,就变成了一个返回整型指针函数原型声明。

    1.1K20

    函数指针指针函数用法和区别

    指针函数 定义 指针函数,简单的来说,就是一个返回指针函数,其本质是一个函数,而该函数的返回值是一个指针。 声明格式为:*类型标识符 函数名(参数表) 这似乎并不难理解,再进一步描述一下。...其返回值是一个 int 类型指针,是一个地址。 这样描述应该很容易理解了,所谓的指针函数也没什么特别的,和普通函数对比不过就是其返回了一个指针(即地址值)而已。...,需要一个同类型指针来接收其函数的返回值。...不过也可以将其返回值定义为 void*类型,在调用的时候强制转换返回值为自己想要的类型,如下: //指针函数 void* f(int a,int b){ Data * data = new Data...写法不同 指针函数:int* fun(int x,int y); 函数指针:int (*fun)(int x,int y); 可以简单粗暴的理解为,指针函数的*是属于数据类型的,而函数指针的星号是属于函数名的

    22120

    函数指针

    形式:数据类型(*指针变量名字)(参数的数据类型1,参数数据类型2…)=函数名(或者强制类型转换后的函数地址) 下面为Qt中的c语言代码: 函数名地址,变量地址等在vs中会一直变,因为每次启动程序都要重新分配内存...,在qt中不会变,所以可以直接对函数名地址进行强制类型转换 #include "mainwindow.h" #include #include #include...printf("%d\n", func); //函数指针 void(*fun)(int, int) = func; //强制类型转换,12980724---func函数名首地址...qDebug("%d\n", func); //函数指针 void(*fun)(int, int) = func; //强制类型转换,12980724---func函数名首地址...CRT_SECURE_NO_WARNINGS #include void func(int a, int b) { printf("%d+%d", a, b); } int main() { //函数指针

    26310

    函数指针

    前言: 先看两个基础,函数指针和extern关键字,然后由一个具体的例子,具体使用下函数指针。 一、基础 函数指针:即指向函数指针,本质还是一个指针。...函数指针的声明:返回值类型 ( * 指针变量名) ([形参列表]); 注意这里是声明不是定义,声明之后它就是一个类型了(与int,char,int *等级别等同,这点有点像结构体),然后就可以定义、使用了...二、举例 这里说一下背景,假如我这里做一个平台,我一套代码要交付到多个产品,然后结合产品代码进行使用,那么我做平台肯定不能为每个产品做一套代码,但是有时候同样一个功能,各个产品之间会出现差异,这个时候指针函数就派上用场了...,我给各个产品提供一个指针函数定义的变量,然后各个产品将自己的实现函数挂接在上面,这样就屏蔽了各个产品的差异,甚至有些产品可以不挂接,那么我就判断一下,如果没挂接,我就给一个默认的实现就ok了(这部分在下面代码中没体现...char * str); int (*func2)(int a,int b); }funcs; extern funcs g_hook_func; #endif 说明: 1、上面的所有代码不能同时运行

    1.1K60
    领券