【C语言】指针函数和函数指针的区别及函数指针详解
来源:互联网 发布:mac safari历史记录 编辑:程序博客网 时间:2024/06/03 12:31
1.指针函数
先看下面的函数声明,注意,此函数有返回值,返回值为int *,即返回值是指针类型的。
int *f(int a, int b);
即指针函数是指:返回值是指针的函数,其本质是一个函数。
2.函数指针
顾名思义,函数指针说的就是一个指针
,但这个指针指向的函数,不是普通的基本数据类型或者类对象。
函数指针的定义如下:
int (*f)(int a, int b); // 声明函数指针
函数指针详解:
引言:
我们都知道,数组名就是指向数组第一个元素的常量指针。同理,对于一个函数而言,函数名也是指向函数第一条指令的常量指针。而编译器要做的就是在程序编译之后,为每个函数分配一个首地址
,即该函数第一条指令的地址。一般情况下,我们可以用一个指针来保存这个地址,而这个指针就是函数指针
,该指针可以看作是它指向函数的别名,所以我们可以用该指针来调用这个函数。
函数指针的声明方法:
返回值类型 ( * 指针变量名) ([形参列表]);
Eg:int (*f)(int a, int b)
#include <stdio.h>int add (int num, int num1) { return num + num1;}int main() { int (*p_func)(int,int) = NULL;//函数指针声明 p_func = add; //将函数赋值给函数指针 printf("add是:%p\n", add); printf("结果是:%d\n",p_func(4,7));//函数指针的调用,跟调用函数一样` return 0;}
把函数指针当成一个数组的指针
//实现显示void print_cb(int *p_num) { printf("%d ", *p_num); } //实现循环 void for_each(int *p_num, int size, void (*p_func)(int*)) { int num = 0; for(num = 0; num <= size - 1; num++) { p_func(p_num + num); } } int main() { int arr[] = {1, 2, 3, 4, 5}; for_each(arr, 5, print_cb);//使两个函数链接,把函数的地址传过去,当调用该函数指针的时候就调用该函数 printf("\n"); return 0; }
注1:“返回值类型”说明函数的返回类型,“(指针变量名 )”中的括号不能省
,括号改变了运算符的优先级。若省略整体则成为一个函数说明,说明了一个返回的数据类型是指针的函数,后面的“形参列表”表示指针变量指向的函数所带的参数列表。
注2:函数括号中的形参可有可无
,视情况而定。
更为详细的内容见:http://blog.jobbole.com/44639/
阅读全文
0 0
- 【C语言】指针函数和函数指针的区别及函数指针详解
- C语言--指针函数和函数指针
- c 语言 函数指针和指针函数
- C语言-函数指针和指针函数
- c语言 指针函数与函数指针的区别
- C语言“指针函数”与“函数指针”的区别
- c语言中函数指针与指针函数的区别
- 指针函数和函数指针的区别
- 指针函数和函数指针的区别
- 指针函数和函数指针的区别
- 函数指针和指针函数的区别
- 指针函数和函数指针的区别
- 指针函数和函数指针的区别
- 函数指针和指针函数的区别
- 指针函数和函数指针的区别
- 指针函数和函数指针的区别
- 函数指针和指针函数的区别
- 指针函数和函数指针的区别
- Hessian矩阵与多元函数极值
- 黑书DP例题
- java核心技术之-----整形和浮点类型
- 关于setInterval返回值问题
- Python_week01
- 【C语言】指针函数和函数指针的区别及函数指针详解
- 数组(3)
- ucontext-人人都可以实现的简单协程库
- HDU
- 方差、标准差、均方差、均方误差区别总结
- CSU C(1972): 大梵天的恩赐 -汉诺塔变形-双层汉诺塔
- JavaScript操作Url方法版
- 希尔排序
- fork的底层实现