原文地址:http://blog.csdn.net/dragoniye/archive/2008/12/17/3537701.aspx
函数指针是指向函数的指针变量。
因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上一致的。函数指针有两个用途:调用函数和做函数的参数。函数指针的说明方法为:
数据类型标志符 (*指针变量名)(参数);
int (*ptr)();
注:函数括号中的参数可有可无,视情况而定。
下面的程序说明了函数指针调用函数的方法:
#include
int max(int x,int y){ return(x>y?x:y); }
void main()
{
int a,b,c;
ptr=max;
scanf("%d,%d",&a,&b);
c=(*ptr)(a,b);
printf("a=%d,b=%d,max=%d",a,b,c);
}
ptr是指向函数的指针变量,所以可把函数max()赋给ptr作为ptr的值,即把max()的入口地址赋给ptr,以后就可以用ptr来调用该函数,实际上ptr和max都指向同一个入口地址,不同就是ptr是一个指针变量,不像函数名称那样是死的,它可以指向任何函数,就看你像怎么做了。在程序中把哪个函数的地址赋给它,它就指向哪个函数。而后用指针变量调用它,因此可以先后指向不同的函数,不过注意,指向函数的指针变量没有++和--运算,用时要小心。
不过,在某些编译器中这是不能通过的。这个例子的补充如下。
应该是这样的:
1.定义函数指针类型:
typedef int (*fun_ptr)(int,int);
2.申明变量,赋值:
fun_ptr max_func=max;
也就是说,赋给函数指针的函数应该和函数指针所指的函数原型是一致的。
// 函数定义
void fun1() { printf("function 1 "); }
void fun2() { printf("function 2 "); }
void fun3() { printf("function 3 "); }
void fun4() { printf("function 4 "); }
// 方法1
// 函数数组定义并赋初值
void (*p[])() = { fun1, fun2, fun3, fun4 };
// 调用数组中的函数
for(int i=0; i < 4; i++)
{
p[i]();
}
// 方法2
typedef void (*PFUN)(); // 定义函数指针
PFUNC funArray[] = { fun1, fun2, fun3, fun4 };
// 调用数组中的函数
for(int i=0; i < 4; i++)
{
funArray[i]();
}
分享到:
相关推荐
彻底理解指针,指针数组和数组指针,指针函数和函数指针.doc
指针, 指针的指针, 数组, 指针数组, 数组指针, 指针函数, 函数指针 CC++中函数指针的含义
指针进阶之函数指针和函数指针数组
下面我们来仔细说明一下字符指针数组和指向指针的指针,段1中的程序是下面的样子: char *a[]={"abc","cde","fgh"}; char* *b=a; cout*b|"*(b+1)|"*(b+2); char *a[]定义了一个指针数组,注意不是char[], ...
C语言中对函数指针数组不是很了解,老师最近布置了一个作业,就搜集资料写了一个,希望能给大家启发,如果对C语言复杂指针的分析不是很懂得话,可以网上搜索“右左法则”
函数指针数组
自己整理的经典程序,数组,指针,函数那是相当有用
C语言指针数组函数笔记,自己总结的,希望有帮助
c++的高级应用,c++函数数组指针的使用方法。在使用中大大缩短了我的代码量,感觉不错的方法
C语言 数组 指针 C语言深度解析!彻底了解指针数组,数组指针以及函数指针,很不错的文档,不敢独享,大家一起学习
函数指针数组的妙用,妙用函数指针!
今天在看C++prime plus的时候无意间看到了函数指针,这是个我很少涉及的地方。打算写一个小程序来熟悉一下。
基于Keil的指针数组作为函数的参数显示多个字符串.rar(源码)基于Keil的指针数组作为函数的参数显示多个字符串.rar(源码)基于Keil的指针数组作为函数的参数显示多个字符串.rar(源码)基于Keil的指针数组作为函数...
1、主要是数组指针和函数指针的应用的例子 2、提供两份源代码,第一个是使用流程控制 3、第二个是将数组指针和函数指针结合起来,使用的时候可以举一反三
很复杂,很复杂,值得研究,但不适合做游戏。
函数指针、函数名、二维数组指针做形参时的要注意的地方
C语言的简单基本实例,包括循环、嵌套、数组、指针、函数、结构体等内容。
301-用指针数组作为函数的参数显示多个字符串(51单片机C语言实例Proteus仿真和代码)301-用指针数组作为函数的参数显示多个字符串(51单片机C语言实例Proteus仿真和代码)301-用指针数组作为函数的参数显示多个字符串...
C++中一个重要的特性就是指针,指针不仅具有获得地址的能力,还具有操作地址的能力。指针可以用于数组、或作为函数的参数,用来访问...常见的指针定义有3种:变量指针、数组指针和函数指针的定义。 (1)、变量指针的定
1、指针的本质是一个与地址相关的复合类型,它的值是数据存放的位置(地址);数组的本质则是一系列的变量。 2、数组名对应着(而不是指向... 3、当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。