1、指针函数
(1)定义
指针函数,简单的来说,就是一个返回指针的函数,其本质是一个函数,而该函数的返回值是一个指针。
(2)声明格式
类型标识符 函数名(参数表)
例如:int* sqare(int a);
(3)示例
参见3示例。
2、函数指针
(1)定义
函数指针,其本质是一个指针变量,该指针指向这个函数。总结来说,函数指针就是指向函数的指针。
(2)声明格式
类型说明符 (*函数名) (参数)
例如:int (*fun)(int,int);
(3)示例
参见3示例。
3、示例
(1)代码(VC++6.0)
#include <stdio.h>
/*指针函数,简单的来说,就是一个返回指针的函数,其本质是一个函数,而该函数的返回值是一个指针*/
//定义一个求int类型数值平方值的指针函数,返回值为平方值的地址
int* sqare(int a)
{
a = a *a ;
int *p = &a ;
return p;//返回指针,即平方值地址
}
/*函数指针,其本质是一个指针变量,该指针指向这个函数。总结来说,函数指针就是指向函数的指针。*/
//先定义函数
int add(int x,int y)
{
return x+y;
}
int sub(int x,int y)
{
return x-y;
}
//定义一个函数指针,函数两个int型参数,函数返回值类型为int
int (*fun)(int,int);
int main ()
{
/*指针函数*/
printf("指针函数的示例输出:\n");
int *m = sqare(10) ;//sqare(10)的值为地址,要赋给指针变量
printf("10的平方为%d。\n",*m) ;//打印出10的平方值
printf("12的平方为%d。\n\n",*sqare(12)) ;//打印12的平方值
/*函数指针*/
printf("指针函数的示例输出:\n");
//打印add函数的地址,从以下打印结果可以看出add前加不加&符号打印结果都是一样的
printf("不加&符号时add函数地址为%d,加&符号add函数的地址为%d。\n",add,&add);
printf("从以上打印结果可以看出add前加不加&符号打印结果都是一样的\n");
//函数指针fun指向add函数
fun = add;
printf("10加上5等于%d。\n",fun(10,5));
//函数指针指向sub函数
fun = ⊂
printf("10减去5等于%d。\n\n",sub(10,5));
//调用函数指针的方式也有两种,建议第一种,因为可以清楚的指明这是通过指针的方式来调用函数。
int p = fun (8,6);//调用方式一
int q = (*fun)(8,6);//调用方式二
printf("调用方式一8减去6的结果为%d,\n调用方式二8减去6的结果为%d\n",p,q);
return 0 ;
}