两者主要区别,一个是函数(指针函数),一个是指针变量(函数指针)。
指针函数
(1)定义
指针函数:顾名思义就是带有指针的函数,即其本质是一个函数,只不过这种函数返回的是一个对应类型的地址。
(2) 定义式
type *func (type , type)
如:int *max(int x, int y)
首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量。
(3)演示代码
#include <iostream>
using namespace std;
int *GetNum(int x); //指针函数声明形式
void main(void)
{
cout<<"===============start================"<<endl;
int num;
cout<<"Please enter the number between 0 and 6: ";
cin>>num;
cout<<"result is:"<<*GetNum(num)<<endl; //输出返回地址块中的值
}
int *GetNum(int x) {
static int num[]={0,1,2,3,4,5,6};
return &num[x]; //返回一个地址
}
子函数返回的是数组中某一元素所在的地址值,输出的是这一地址中存储的数。
函数指针
(1)定义
函数指针:指向函数的指针变量,本质上是一个指针变量
(2) 定义式
type (*func)(type , type )
如:int (*max)(int a, int b)
这个特殊的指针指向一个返回整型值的函数。指针的声明必须和它指向函数的声明保持一致。指针名和指针运算符外面的括号改变了默认的运算符优先级。如果没有圆括号,就变成了一个返回整型指针的函数的原型声明。
#include <iostream>
using namespace std;
int max(int a, int b) {
return a>b?a:b;
}
void main(void)
{
cout<<"===========start==========="<<endl;
int (*func)(int,int); //定义一个指向该函数形式的指针变量
func=max; //或者 func=&max; 将max函数的首地址赋给指针func
int a,b;
cout<<"Please enter two numbers:";
cin>>a>>b;
int result=(*func)(a,b); //运用指针变量调用函数
cout<<"max="<<result<<endl;
}
参考:
http://blog.youkuaiyun.com/aigoleague/article/details/8622665
http://blog.youkuaiyun.com/u014131641/article/details/51104808