函数具有可赋值给指针的物理内存地址,一个函数的函数名就是一个指针,它指向函数的代码。一个函数的地址是该函数的进入点,也是调用函数的地址。函数的调用可以通过函数名,也可以通过指向函数的指针来调用。函数指针还允许将函数作为变元传递给其他函数。

      不带括号和变量列表的函数名,这可以表示函数的地址,正如不带下标的数组名可以表示数组的首地址

定义形式:

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

例如:

        int (*p)(int i,int j);

    p是一个指针,它指向一个函数,该函数有2个整形参数,返回类型为int。p首先和*结合,表明p是一个指针。然后再与()结合,表明它指向的是一个函数。指向函数的指针也称为函数指针。

C七:指向函数的指针 ------ 函数指针(function pointer)_初值

int LocateElem(SqList L, ElemType e, Status(*compare)(ElemType, ElemType)){
	// 初始条件:顺序线性表L已存在,compare()是数据元素判定函数(满足为1,否则为0) 
	// 操作结果:返回L中第1个与e满足compare()的数据元素的位序
	//          若这样的数据元素不存在, 则返回值为0。算法2.6
    // compare为满足一定条件的一类函数,称为函数类形参 
	 ElemType *p;
	 int i = 1; // i的初值为第1个元素的位序
	 p = L.elem; // p的初值为第1个元素的存储位置
	 while(i<=L.length && !compare(*p++,e))
	 	i++;
	 if(i<=L.length)
	  	return i;
	 else
	    return 0; 
} 

 int *f(int i, int j);

        int (*p)(int i, int j);

    前者是返回值是指针的函数;后者是一个指向函数的指针