21xrx.com
2024-12-22 19:28:26 Sunday
登录
文章检索 我的文章 写文章
C语言函数指针 - 初步了解和使用
2023-06-15 10:38:11 深夜i     --     --
C语言 函数指针 代码 排序算法 指针变量

C语言是一门广泛应用于嵌入式系统和系统编程的编程语言,其中函数指针是其重要的特性之一。在C语言中,函数指针是指一个指向函数的指针变量,允许将函数作为参数传递给其他函数,或在运行时动态地选择要执行的函数。本文将介绍函数指针的基本概念和使用方法,以及一些应用实例和注意事项。

首先,对于C语言中的函数指针,我们需要了解一些基本概念和语法规则。函数指针的类型定义采用以下形式:


返回类型 (*指针变量名)(参数类型1, 参数类型2, ...);

其中,指针变量名可以任意取名,其作用是指向一个具有相同返回类型和参数列表的函数。例如,以下代码定义了一个名为funp的函数指针变量,指向一个函数,它的返回类型为int,参数类型为两个int:


int (*funp)(int, int);

接着,我们可以通过以下方式将函数赋值给函数指针:


int add(int a, int b) { return a + b; }

funp = add;

这样,函数指针funp就指向了函数add。我们还可以通过函数指针调用该函数:


int result = funp(1, 2); // result为3

接下来,让我们看一些实际应用中的例子。

假设我们有一组可以进行排序的数据,我们可以编写一个sort函数,通过传递一个函数指针,决定使用哪种排序算法。以下是一个简单的实现:


// 冒泡排序

void bubble_sort(int* arr, int len) {

  for (int i = 0; i < len; i++) {

    for (int j = 0; j < len - i - 1; j++) {

      if (arr[j] > arr[j + 1]) {

        int tmp = arr[j];

        arr[j] = arr[j + 1];

        arr[j + 1] = tmp;

      }

    }

  }

}

// 插入排序

void insert_sort(int* arr, int len) {

  for (int i = 1; i < len; i++) {

    int key = arr[i];

    int j = i - 1;

    while (j >= 0 && arr[j] > key) {

      arr[j + 1] = arr[j];

      j--;

    }

    arr[j + 1] = key;

  }

}

// 排序函数

void sort(int* arr, int len, void (*compare)(int*, int)) {

  compare(arr, len);

}

int main() {

  int arr[] = 5;

  int len = sizeof(arr) / sizeof(arr[0]);

  sort(arr, len, bubble_sort); // 使用冒泡排序

  // sort(arr, len, insert_sort); // 使用插入排序

  for (int i = 0; i < len; i++) {

    printf("%d ", arr[i]);

  }

  return 0;

}

在sort函数中,我们将数据和数据长度作为参数传递给了一个compare函数,该函数的类型为void (*)(int*, int),即函数指针,该指针指向的函数将对数组进行排序。我们可以通过将不同的排序函数作为参数来调用sort函数,这样就可以灵活地选择排序算法了。

最后,我们需要注意一些使用函数指针的注意事项:

1. 函数指针变量的类型必须和所指向的函数的返回类型和参数类型完全一致。

2. 使用函数指针调用函数时,可以使用指针名加括号的方式,也可以使用指针加星号加括号的方式,如funp(1, 2)和(*funp)(1, 2)等价。

3. 函数指针可以作为函数的返回值,但需要注意返回的指针变量在函数执行完毕后是否还有效。

4. 函数指针变量可以为NULL,表示未指向任何函数。

  
  
下一篇: 我一直认为

评论区

{{item['qq_nickname']}}
()
回复
回复