指向函数的指针
来源:互联网 发布:淘宝官方营销活动 编辑:程序博客网 时间:2024/04/29 09:11
在C语言中,函数本身不是变量,但每个函数也有其入口地址,这个地址是在编译的时就被分配的,这个地址也称为函数的指针。因此,用户可以定义指向函数的指针,这种指针可以被赋值、存放于数组中,传递给函数及作为函数的返回值等。
函数指针的一般形式为:
数据类型(*指针变量名)()
例如:
int (*p)();
char(*n)();
这样就定义指定返回值的函数指针。例如,在“int (*p)();”中定义的是返回值为int的函数指针,同样“char(*n)();”中定义的是返回值为char的函数指针。由该定义可以看出,函数指针在定义时并没有指明它具体指向哪个函数,将其指向一个具体的函数的过程就是函数指针的初始化,如下所示:
p=sum;
当然,在此之后,该函数指针还能指向其他具有同样返回值的函数,这在函数指针的使用中是非常常见的。
对于函数指针的使用,有以下几个注意要点。
1. 在定义或声明函数指针是,“*”两边的括号是不能省略的,因为如果将括号省略,指针变量名右边的括号的优先级高于“*”,因此,此时就相当于“int*(p());”,这里的意义是返回值为指针的函数,并不是指向函数的指针。
2. 在给函数指针赋值的时,只需给给出函数名而不需给出具体的参数,因此此时是将函数入口地址赋给函数指针,而不涉及任何实参和形参的结合问题。
3. 对于指向函数的指针变量,像p+n,p++等都是没有意义的。
下例中显示了函数指针的基本使用方式。
#include<stdio.h>
void hello_num(int num)
{
int i;
for(int i=0;i<num;i++)
{
printf("helloworld ,num is %d/n",i);
}
}
void hello(void)
{
printf("helloworld , no num/n");
}
void main()
{
void (*p)();
p=hello_num;
int a=5;
(*p)(5);
p=hello;
(*p)();
}
程序执行结果如下:
helloworld,num is 0
helloworld,num is 1
helloworld,num is 2
helloworld,num is 3
helloworld,num is 4
helloworld,no num
由上例可以看出,函数指针在定义或声明时,其数据类型必须与函数的返回值相一致。函数指针可以指向多个不同的函数,用户可以根据需要将函数指针设为另一函数的形参,在调用时通过函数指针来选用不同的函数,这就是所谓的回调函数的原理。
- 指向函数的指针
- 指向函数的指针
- 指向函数的指针
- 指向函数的指针
- 指向函数的指针
- 指向函数的指针
- 指向函数的指针
- 指向函数的指针
- 指向函数的指针
- 指向函数的指针
- 指向函数的指针
- 指向函数的指针
- 指向函数的指针
- 指向函数的指针
- 指向函数的指针
- 指向函数的指针
- 指向函数的指针
- 指向函数的指针
- 获取String类型的日期和时间
- R3 DELTA处理
- 交通灯管理系统
- struts2 文件流, 文件输出到浏览器 文件下载
- 事件示例代码
- 指向函数的指针
- PostGIS开启开源空间数据库的未来
- 面向对象软件的测试用例的设计方法
- 指针常量与常量指针,函数指针与指针函数,指针的指针
- vpn
- oracle sys 与system的区别
- 三维GIS,看上去很美
- 一年蜕变时
- 卸载xcode