函数指针和指针函数的区别

一、函数指针和函数指针数组的区别

函数指针是指向函数的指针变量,而函数指针数组则是由函数指针组成的数组。

函数指针数组定义:

    
        int (*funcArr[5])(int a, int b);
    

上面的定义中,funcArr是一个长度为5的数组,每个元素都是一个指向返回类型为int,参数类型为int和int的函数的指针。

二、函数指针的使用

函数指针可以用来调用函数,也可以作为函数的返回值或者参数。

函数指针作为形参使用:

    
        int add(int a, int b);
        void callback(int (*func)(int, int));
        int main() {
            callback(add);
            return 0;
        }
        void callback(int (*func)(int, int)) {
            func(1, 2);
        }
    

上面的代码中,在主函数中调用callback函数,并将add函数的地址作为参数传入callback函数中。在callback函数中,函数指针func被调用,此时add函数也被调用,并返回了3。

三、函数指针和指针函数

函数指针是指向函数的指针变量,而指针函数则是返回值为指针的函数。

指针函数的定义及使用:

    
        int* getArray() {
            int* arr = (int*)malloc(sizeof(int) * 10);
            return arr;
        }
        int main() {
            int* ptr = getArray();
            return 0;
        }
    

上面的代码中,getArray函数返回一个int类型的指针。在主函数中,使用指针变量ptr来接收getArray函数的返回值。

四、指针函数怎么用

指针函数可以用来返回指针,也可以作为函数的参数。

指针函数作为实参使用:

    
        void print(int* arr) {
            int i;
            for (i = 0; i < 10; i++) {
                printf("%d ", arr[i]);
            }
            printf("\n");
        }
        void fill(int* (*getArray)()) {
            int i;
            int* arr = getArray();
            for (i = 0; i < 10; i++) {
                arr[i] = i;
            }
            print(arr);
        }
        int* getArray() {
            int* arr = (int*)malloc(sizeof(int) * 10);
            return arr;
        }
        int main() {
            fill(getArray);
            return 0;
        }
    

上面的代码中,fill函数的参数是一个指向返回值为int类型指针的函数指针,即getArray函数。在fill函数内部,getArray函数被调用,并返回一个int类型的指针。fill函数利用这个指针,将其内容填充为0~9的数字,并调用print函数打印数组。

五、函数指针表

函数指针表是由函数指针构成的数组,每个函数指针指向不同的函数。我们可以通过函数指针表来实现对不同函数的动态调用。

函数指针表的定义和使用:

    
        int add(int a, int b);
        int sub(int a, int b);
        int mul(int a, int b);
        int div(int a, int b);
        int main() {
            int (*funcTable[])(int, int) = {add, sub, mul, div};
            int i;
            for (i = 0; i < 4; i++) {
                int result = funcTable[i](10, 5);
                printf("%d ", result);
            }
            return 0;
        }
        int add(int a, int b) {
            return a + b;
        }
        int sub(int a, int b) {
            return a - b;
        }
        int mul(int a, int b) {
            return a * b;
        }
        int div(int a, int b) {
            return a / b;
        }
    

上面的代码中,funcTable是一个函数指针数组,其中的每个元素都是指向各自函数的函数指针。在主函数中,我们遍历函数指针表,依次调用指向的函数。

六、指针函数和函数指针的区别

指针函数返回指针类型的数据,而函数指针是指向函数的指针变量。

指针函数的用法:

    
        int* getArray() {
            int* arr = (int*)malloc(sizeof(int) * 10);
            return arr;
        }
        int main() {
            int* ptr = getArray();
            return 0;
        }
    

函数指针的用法:

    
        int add(int a, int b);
        int main() {
            int (*func)(int, int) = add;
            int result = func(1, 2);
            return 0;
        }
        int add(int a, int b) {
            return a + b;
        }
    

七、指针函数和普通函数的区别

指针函数返回指针类型的数据,而普通函数则不返回指针类型数据。

指针函数的用法:

    
        int* getArray() {
            int* arr = (int*)malloc(sizeof(int) * 10);
            return arr;
        }
        int main() {
            int* ptr = getArray();
            return 0;
        }
    

普通函数的用法:

    
        int add(int a, int b);
        int main() {
            int result = add(1, 2);
            return 0;
        }
        int add(int a, int b) {
            return a + b;
        }
    

八、指针变量函数

指针变量函数是一个函数,它返回一个指针变量。

指针变量函数的用法:

    
        int* getPointer(int value) {
            int* ptr = (int*)malloc(sizeof(int));
            *ptr = value;
            return ptr;
        }
        int main() {
            int* ptr = getPointer(10);
            printf("%d ", *ptr);
            free(ptr);
            return 0;
        }
    

在上面的代码中,getPointer函数返回一个指向int类型变量的指针变量,其中指针变量所指向的int型变量的值为函数传入的参数value。在主函数中,我们调用getPointer函数,并将其返回的指针变量的值打印出来。

九、指针与函数的关系区别

指针是一种数据类型,可以指向内存中存储的任何数据类型,包括函数。

指向函数的指针变量的用法:

    
        int add(int a, int b);
        int main() {
            int (*func)(int, int) = add;
            int result = func(1, 2);
            return 0;
        }
        int add(int a, int b) {
            return a + b;
        }
    

上面的代码中,定义了一个指向函数add的函数指针变量func。在主函数中,我们遍历函数指针表,依次调用指向的函数。

十、函数指针和回调函数

函数指针可以作为回调函数使用,回调函数是指在某个事件发生时由系统调用的函数。

函数指针作为回调函数的用法:

    
        void invoke( void (*cb)(const char*) ) {
            cb("hello");
        }
        void myCallback(const char* str) {
            printf("%s", str);
        }
        int main() {
            invoke(myCallback);
            return 0;
        }
    

上面的代码中,myCallback函数是一个回调函数,它被invoke函数在事件发生时调用。在主函数中,我们调用invoke函数,并把myCallback函数的指针作为参数传递给它。

原创文章,作者:FHMM,如若转载,请注明出处:https://www.506064.com/n/131630.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
FHMMFHMM
上一篇 2024-10-03 23:46
下一篇 2024-10-03 23:46

相关推荐

  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • Python中capitalize函数的使用

    在Python的字符串操作中,capitalize函数常常被用到,这个函数可以使字符串中的第一个单词首字母大写,其余字母小写。在本文中,我们将从以下几个方面对capitalize函…

    编程 2025-04-29
  • Python中new和init的区别

    new和init都是Python中常用的魔法方法,它们分别负责对象的创建和初始化,本文将从多个角度详细阐述它们的区别。 一、创建对象 new方法是用来创建一个对象的,它是一个类级别…

    编程 2025-04-29
  • Python中set函数的作用

    Python中set函数是一个有用的数据类型,可以被用于许多编程场景中。在这篇文章中,我们将学习Python中set函数的多个方面,从而深入了解这个函数在Python中的用途。 一…

    编程 2025-04-29
  • 单片机打印函数

    单片机打印是指通过串口或并口将一些数据打印到终端设备上。在单片机应用中,打印非常重要。正确的打印数据可以让我们知道单片机运行的状态,方便我们进行调试;错误的打印数据可以帮助我们快速…

    编程 2025-04-29
  • 三角函数用英语怎么说

    三角函数,即三角比函数,是指在一个锐角三角形中某一角的对边、邻边之比。在数学中,三角函数包括正弦、余弦、正切等,它们在数学、物理、工程和计算机等领域都得到了广泛的应用。 一、正弦函…

    编程 2025-04-29
  • Python3定义函数参数类型

    Python是一门动态类型语言,不需要在定义变量时显示的指定变量类型,但是Python3中提供了函数参数类型的声明功能,在函数定义时明确定义参数类型。在函数的形参后面加上冒号(:)…

    编程 2025-04-29
  • Python实现计算阶乘的函数

    本文将介绍如何使用Python定义函数fact(n),计算n的阶乘。 一、什么是阶乘 阶乘指从1乘到指定数之间所有整数的乘积。如:5! = 5 * 4 * 3 * 2 * 1 = …

    编程 2025-04-29
  • Sublime Test与Python的区别

    Sublime Text是一款流行的文本编辑器,而Python是一种广泛使用的编程语言。虽然Sublime Text可以用于编写Python代码,但它们之间有很多不同之处。接下来从…

    编程 2025-04-29
  • Python定义函数判断奇偶数

    本文将从多个方面详细阐述Python定义函数判断奇偶数的方法,并提供完整的代码示例。 一、初步了解Python函数 在介绍Python如何定义函数判断奇偶数之前,我们先来了解一下P…

    编程 2025-04-29

发表回复

登录后才能评论