指向函数的指针

指向函数的指针
</pre><pre name="code" class="cpp">/***********************
功能:指向函数的指针
日期:2014年12月6日21:06:58
************************/
#include<stdio.h>
#include<stdlib.h>
int min(int a, int b)
{
	
	if(a < b) return a;
	else return b;
}
int  main()
{

	int (*pmin)(int ,int);//定义了一个指向函数的指针变量。函数的格式是返回值为int型,形参列表(int,int)
<span style="white-space:pre">						</span>//pmin定义后,它可以指向任何满足该格式的函数。
	int a, b, m;
    pmin = min;//将min函数的首地址值赋给指针变量pmin,也就是使pmin指向函数min,C语言中,函数名称代表函数的首地址
	printf("Please input two integer number:\n");
	scanf("%d,%d",&a, &b);
	m = (*pmin)(a, b);//由于pmin指向了函数min的首地址,所以这句话完全等效于min(a,b)
	printf("min = %d\n",m);
	return 0;
}

/********************************************
Please input two integer number:
2,6
min = 2
Press any key to continue
**********************************************/
</pre><pre name="code" class="cpp">
</pre><pre name="code" class="cpp">

当把int(*pmin)(int ,int)里面的参数省略时,发生如下错误

error C2440: '=' : cannot convert from 'int (__cdecl *)(int,int)' to 'int (__cdecl *)(void)

其原因是调用的函数min的参数是两个形参,使用函数的指针时也必须要指出里面的参数个数,可以省略参数的名称,所以程序中用的(int,int)

注意:

  (1) 指向函数的指针变量的一般定义形式为:

   数据类型 (*指针变量名)(函数参数列表)

   这里数据类型就是函数返回值的类型

  (2) int (* p) ( int,int ); 它只是定义一个指向函数的指针变量 p, 它不是固定指向哪一个函数的,而只是表示定义这样一个类型的变量,它是专门用来存放函数的入口地址的。在程序中把哪一函数(该函数的值应该是整形的,且有两个整形参数)的地址赋给它,他就指向哪一个函数。在一个函数中,一个函数指针变量可以先后指向同类型的不同函数。

  (3) p = max; 在给函数指针变量赋值时,只需给出函数名而不必给出函数参数,因为是将函数的入口地址赋给 p ,而不涉及 实参和形参的结合问题,不能写成 p = max(a,b);

  (4) c = (*p)(a,b) 在函数调用时,只需将( *p ) 代替函数名即可,后面实参依旧。

  (5) 对于指向函数的指针变量,像 p++ ,p+n.....是无意义的。

注意事项1-5是取自:http://www.cnblogs.com/zxl2431/archive/2011/03/25/1995285.html



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值