int main()
{
CA ca;
PTRFUN pFun;
pFun=&CA::lcFun;
//ca.lcFun(2);
(ca.*pFun)(2);
return 0;
}
4.C语言中函数指针用法函数在内存中有一个物理位置 , 而这个位置是可以赋给一个指针的 。
一零点函数的地址就是该函数的入口点 。因此 , 函数指针可被用来调用一个函数 。
函数的地址是用不带任何括号或参数的函数名来得到的 。(这很类似于数组地址的得到方法 , 即 , 在只有数组名而无下标是就得到数组地址 。)
怎样说明一个函数指针变量呢 ?为了说明一个变量 fn_pointer 的类型是"返回值为 int 的函数指针" , 你可以使用下面的说明语句:int (*fn_pointer) ();为了让编译器能正确地解释这句语句 , *fn_pointer 必须用括号围起来 。若漏了这对括号 , 则:int *fn_pointer ();的意思完全不同了 。
fn_pointer 将是一个函数名 , 其返回值为 int 类型的指针 。2:函数指针变量 在C语言中规定 , 一个函数总是占用一段连续的内存区 , 而函数名就是该函数所占内存区的首地址 。
我们可以把函数的这个首地址 ( 或称入口地址 ) 赋予一个指针变量 , 使该指针变量指向该函数 。然后通过指针变量就可以找到并调用这个函数 。
我们把这种指向函数的指针变量称为 " 函数指针变量 "。函数指针变量定义的一般形式为:类型说明符 (* 指针变量名 )();其中 " 类型说明符 " 表示被指函数的返回值的类型 。
"(* 指针变量名 )" 表示 "*" 后面的变量是定义的指针变量 。最后的空括号表示指针变量所指的是一个函数 。
例如: int (*pf)();表示 pf 是一个指向函数入口的指针变量 , 该函数的返回值 ( 函数值 ) 是整型 。下面通过例子来说明用指针形式实现对函数调用的方法 。
int max(int a,int b) { if(a>b)return a; else return b; } main() { int max(int a,int b);int(*pmax)();int x,y,z; pmax=max; printf("input two numbers:/n");scanf("%d%d",&x,&y);z=(*pmax)(x,y);printf("maxmum=%d",z);} 从上述程序可以看出用 , 函数指针变量形式调用函数的步骤如下:1>. 先定义函数指针变量 , 如后一程序中第 9 行 int (*pmax)(); 定义 pmax 为函数指针变量 。2>. 把被调函数的入口地址 ( 函数名 ) 赋予该函数指针变量 , 如程序中第 11 行 pmax=max;3>. 用函数指针变量形式调用函数 , 如程序第 14 行 z=(*pmax)(x,y); 调用函数的一般形式为: (* 指针变量名 ) ( 实参表 ) 使用函数指针变量还应注意以下两点:a. 函数指针变量不能进行算术运算 , 这是与数组指针变量不同的 。
数组指针变量加减一个整数可使指针移动指向后面或前面的数组元素 , 而函数指针的移动是毫无意义的 。b. 函数调用中 "(* 指针变量名 )" 的两边的括号不可少 , 其中的 * 不应该理解为求值运算 , 在此处它只是一种表示符号 。
3:指针型函数 前面我们介绍过 , 所谓函数类型是指函数返回值的类型 。在C语言中允许一个函数的返回值是一个指针 ( 即地址 ) , 这种返回指针值的函数称为指针型函数 。
定义指针型函数的一般形式为:类型说明符 * 函数名 ( 形参表 ) { …… /* 函数体 */ } 其中函数名之前加了 "*" 号表明这是一个指针型函数 , 即返回值是一个指针 。类型说明符表示了返回的指针值所指向的数据类型 。
如:int *ap(int x,int y) { …… /* 函数体 */ } 表示 ap 是一个返回指针值的指针型函数 , 它返回的指针指向一个整型变量 。下例中定义了一个指针型函数 day_name , 它的返回值指向一个字符串 。