函数指针系列之函数数组指针

    指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; 能很方便地使用数组和字符串; 并能象汇编语言一样处理内存地址,从而编出精练而高效的程序。指针极大地丰富了C语言的功能。在此本文将重点介绍当指针指向函数时的应用以及在函数数组中指针的应用(极大地方便了指针的调用)。

    所谓的函数指针就是指向函数的指针,我们知道在C语言中任何的数据类型均有地址,与指针指向其他数据类型一样,函数指针指向了该函数在内存中的首地址。请看下面两个例子:(声明本文的例子在Linux-gcc version 4.5.1版本下编译运行通过)

#include <stdio.h>

int add(int, int );

int main(void){
  int iData1 = 0, iData2 = 0;
  int *pData = NULL;
  int (*pFun)(int, int) = add;

  pData = &iData1;
  *pData = 10;
   iData2 = 20;
   printf("The Address pData = [%p]\n", pData); //打印指针指向整形数据iData1的地址
   printf("The Address pFun = [%p]\n", &pFun); //打印指针指向的函数地址
   printf("[%d] + [%d] = [%d]", iData1, iData2, pFun(iData1, iData2)); //通过指针调用函数
    return 0;}

int add(int data1, int data2)
{
     return data1 + data2;
}
运行结果如下:
-------------------------------------------------------------------------------------
The Address pData = [0xbfbcd294] 
The Address pFun = [0xbfbcd290]
[10] + [20] = [30]
-------------------------------------------------------------------------------------
当然,指针指向的地址均是随机产生的地址
从上面的这个例子中我们知道了函数指针的属性以及函数指针使用方法,接下来我们将继续讨论函数数组指针。
当然我们也从例子入手来说明函数数组指针,请看下面的例子:
#include <stdio.h>

int add(int, int );
int sub(int, int );
int mul(int, int);
int div(int, int);

int(*showFun[])(int, int)={add, sub, mul,div};
#define FUN_MAX_NUM  (sizeof(showFun) / sizeof(showFun[0]))	//计算出指针数组中函数的个数

int main(void){
  int iData1 = 0, iData2 = 0;
  int *pData = NULL;
  int (*pFun)(int, int) = add;
  int  iLoop = 0;

   pData = &iData1;
   *pData = 10;
   iData2 = 20;
  int (*pFun)(int, int) = add;
  int  iLoop = 0;

   pData = &iData1;
   *pData = 10;
   iData2 = 20;
   printf("The Address pData = [%p]\n", pData);
   printf("The Address pFun = [%p]\n", &pFun);
   printf("[%d] + [%d] = [%d]\n", iData1, iData2, pFun(iData1, iData2));

   for(; iLoop < FUN_MAX_NUM; iLoop++){
        printf("[%d]\n", showFun[iLoop](iData1, iData2));	//指针数组的调用
   }
   return 0;
}

int add(int data1, int data2){
   return data1 + data2;
}
int sub(int data1, int data2){
   return (data1 - data2);
}
int mul(int data1, int data2){
   return (data1 * data2);
}
int div(int data1, int data2){
   return (data1 / data2);
}

其执行结果如下:
The Address pData = [0xbf83d7e0]
The Address pFun = [0xbf83d7dc]
[10] + [20] = [30]
[30]
[-10]
[200]
[0]

结束语:
       看完上面的例子相信你对C语言的指针的强大以及功能的多样性感到惊叹,的确要掌握好C这门语言的话,首先就要掌握跟活用指针。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值