函数指针和函数数组
来源:互联网 发布:python 输出布尔值 编辑:程序博客网 时间:2024/06/06 20:27
函数指针是指向函数的指针变量。
因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,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]();
}
转自http://blog.csdn.net/dragoniye/archive/2008/12/17/3537701.aspx
- 函数指针 和 函数指针数组 和 函数指针数组
- 函数指针和函数数组
- 函数指针和函数数组
- 函数指针和函数数组
- 指针、数组和函数
- 指针.数组和函数
- 指针、数组和函数
- 指针,数组和函数
- 数组、指针和函数
- 函数指针和指针函数 数组指针和指针数组
- 数组指针和指针数组,函数指针和指针函数
- 指针函数和函数指针、指针数组和数组指针
- 指针函数和函数指针、指针数组和数组指针
- 数组指针和指针数组 指针函数和函数指针
- 函数指针,指针数组和数组指针
- 数组指针,指针数组和函数指针
- 数组指针和函数指针
- 指针函数、数组指针、函数指针、函数指针数组和指向函数指针数组的指针
- 好長時間沒有C#開發程序了
- BTree,B-Tree,B+Tree,B*Tree都是什么
- volist 换行显示
- IE,firefox内存溢出原因与解决方法
- Linux Shell编程入门 (2)
- 函数指针和函数数组
- History of C++
- 基于.NET2.0的System.Net.Mail发送邮件
- 弹出层效果
- (转)linux Crond 执行预定任务
- 分页存储过程及调用方法
- 业务建模时期(上)
- It will cause a new session when you use lazy loading collection, and the collection will assicated with the new session and the
- 自由时差与总时差