【C语言】指针函数和函数指针的区别及函数指针详解

ゞ 浴缸里的玫瑰 2022-06-11 03:59 434阅读 0赞

1.指针函数

  先看下面的函数声明,注意,此函数有返回值,返回值为int *,即返回值是指针类型的。

  1. int *f(int a, int b);

  即指针函数是指:返回值是指针的函数,其本质是一个函数。

2.函数指针

  顾名思义,函数指针说的就是一个指针,但这个指针指向的函数,不是普通的基本数据类型或者类对象。

函数指针的定义如下:

  1. int (*f)(int a, int b); // 声明函数指针

函数指针详解:

引言:

  我们都知道,数组名就是指向数组第一个元素的常量指针。同理,对于一个函数而言,函数名也是指向函数第一条指令的常量指针。而编译器要做的就是在程序编译之后,为每个函数分配一个首地址,即该函数第一条指令的地址。一般情况下,我们可以用一个指针来保存这个地址,而这个指针就是函数指针,该指针可以看作是它指向函数的别名,所以我们可以用该指针来调用这个函数。

函数指针的声明方法:

返回值类型 ( * 指针变量名) ([形参列表]);

  1. Egint (*f)(int a, int b)
  2. #include <stdio.h>
  3. int add (int num, int num1) {
  4. return num + num1;
  5. }
  6. int main() {
  7. int (*p_func)(int,int) = NULL;//函数指针声明
  8. p_func = add; //将函数赋值给函数指针
  9. printf("add是:%p\n", add);
  10. printf("结果是:%d\n",p_func(4,7));//函数指针的调用,跟调用函数一样`
  11. return 0;
  12. }

把函数指针当成一个数组的指针

  1. //实现显示
  2. void print_cb(int *p_num) {
  3. printf("%d ", *p_num);
  4. }
  5. //实现循环
  6. void for_each(int *p_num, int size, void (*p_func)(int*)) {
  7. int num = 0;
  8. for(num = 0; num <= size - 1; num++) {
  9. p_func(p_num + num);
  10. }
  11. }
  12. int main() {
  13. int arr[] = {
  14. 1, 2, 3, 4, 5};
  15. for_each(arr, 5, print_cb);//使两个函数链接,把函数的地址传过去,当调用该函数指针的时候就调用该函数
  16. printf("\n");
  17. return 0;
  18. }

  注1:“返回值类型”说明函数的返回类型,“(指针变量名 )”中的括号不能省,括号改变了运算符的优先级。若省略整体则成为一个函数说明,说明了一个返回的数据类型是指针的函数,后面的“形参列表”表示指针变量指向的函数所带的参数列表。

  注2:函数括号中的形参可有可无,视情况而定。

  更为详细的内容见:http://blog.jobbole.com/44639/

发表评论

表情:
评论列表 (有 0 条评论,434人围观)

还没有评论,来说两句吧...

相关阅读

    相关 C++函数指针指针函数

    指针函数:一个返回指针的函数,本质是一个函数,返回的变量为指针类型。这里不做赘述。主要讲函数指针的概念与运用。 函数指针 定义 本质为一个指针变量,这个指针指向一

    相关 指针函数函数指针

    指针函数和函数指针的区别在于: 函数指针是指针指向函数地址,指针函数是返回值类型为指针。 下面看下函数指针的例子: include<stdio.h>

    相关 函数指针指针函数

      函数指针和指针函数经常是很多初学者感到疑惑的地方,其实这两个是完全不同的概念。 指针函数   指针函数就是返回值为指针类型的函数。 函数指针   指针函数的概念其实