C语言教程
C语言控制语句
C语言函数
C语言数组
C语言指针
C语言字符串
C语言数学函数
C语言结构
C语言文件处理
C预处理器

C语言函数指针参数

到目前为止,我们已经看到在C编程中,我们可以将变量作为参数传递给函数。我们不能将函数作为参数传递给另一个函数。但是我们可以使用函数指针将函数的引用作为参数传递。此过程称为"按引用调用",因为函数参数作为保存参数地址的指针传递。如果函数使用指针进行了任何更改,那么它还将反映所传递变量地址处的更改。
因此,C编程允许您创建指向函数的指针,该指针可以进一步作为参数传递给函数。我们可以创建一个函数指针,如下所示:
(type) (*pointer_name)(parameter);
在以上语法中,类型是函数返回的变量类型, * pointer_name 是函数指针,而参数是传递给函数的参数列表。
我们来看一个示例:
float (*add)(); // this is a legal declaration for the function pointer
float *add(); // this is an illegal declaration for the function pointer
一个函数指针也可以指向另一个函数,或者可以说它保存了另一个函数的地址。
float add (int a, int b);  // function declaration
float (*a)(int, int);  // declaration of a pointer to a function
a=add; // assigning address of add() to 'a' pointer
在上述情况下,我们声明了一个名为" add "的函数。我们还声明了函数指针(* a),该函数返回浮点型值,并包含两个整数类型的参数。现在,我们可以将 add()函数的地址分配给'a'指针,因为它们都具有相同的返回类型(浮点数)和相同类型的参数。
现在," a"是指向add()函数的指针。我们可以通过使用指针" a"来调用add()函数。让我们看看如何做到这一点:
a(2, 3);
上面的语句使用指针'a'调用add()函数,并且在'a'中传递了两个参数,即2和3、
让我们来看一个简单的例子如何将函数指针作为参数传递的示例。
void display(void (*p)())
{
    for(int i=1;i<=5;i++)
    {
        p(i);
    }
}
void print_numbers(int num)
{
    cout<<num;
}
int main()
{
    void (*p)(int);     // void function pointer declaration
    printf("The values are :");
  display(print_numbers);
    return 0;
}
在上面的代码中,
我们已经定义了两个名为'display()'和print_numbers()的函数。 在main()方法内部,我们声明了一个名为(* p)的函数指针,并调用了display()函数,并在其中传递了print_numbers()函数。 当控件转到display()函数时,指针* p包含print_numbers()函数的地址。这意味着我们可以使用函数指针* p调用print_numbers()函数。 在display()函数的定义中,我们定义了一个" for"循环,在for循环中,我们使用语句p(i)调用print_numbers()函数。在这里,p(i)表示将在i的每次迭代中调用print_numbers()函数,并打印出" i"的值。
输出
函数指针作为C
中的参数,现在,我们将函数指针作为Quicksort函数" qsort"中的参数传递。它使用一种对数组进行排序的算法。
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int compare(const int *p, const int *q);
int (*f)(const void *a, const void *b);
int main()
{
    int a[]={4,7,6,1,3,2};
    int num=sizeof(a)/sizeof(int);
    f=&compare;
    qsort(a, num, sizeof(int), (*f));
    for(int i=0;i<num;i++)
    {
        printf("%d ,",a[i]);
    }
    
}
int compare(const int *p, const int *q)
{
     if (*p == *q)
        return 0;
    else if (*p < *q)
        return -1;
    else
        return 1;
}
在上面的代码中,
我们定义了一个整数类型的数组。创建数组后,我们已经使用sizeof()运算符计算了数组的大小,并将大小存储在 num中 我们定义了compare()函数,该函数对数组中的所有元素进行比较并按升序排列。 我们还声明了函数指针(* f),并使用语句f =&compare将compare()函数的地址存储在(* f)中。 我们调用qsort()函数,在该函数中我们传递数组,数组的大小,元素的大小以及比较函数。比较函数(即compare())将比较数组元素,直到数组中的元素按升序排序为止。
输出
函数指针作为C中的参数
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4