函数指针数组

原创 2007年10月08日 09:37:00

关于函数指针数组的定义


关于函数指针数组的定义方法,有两种:一种是标准的方法;一种是蒙骗法。

第一种,标准方法:

{
分析:函数指针数组是一个其元素是函数指针的数组。那么也就是说,此数据结构是是一个数组,且其元素是一个指向函数入口地址的指针。
根据分析:首先说明是一个数组:数组名[]
其次,要说明其元素的数据类型指针:*数组名[].
再次,要明确这每一个数组元素是指向函数入口地址的指针:函数返回值类型 (*数组名[])().请注意,这里为什么要把“*数组名[]”用括号扩起来呢?因为圆括号和数组说明符的优先级是等同的,如果不用圆括号把指针数组说明表达式扩起来,根据圆括号和方括号的结合方向,那么 *数组名[]() 说明的是什么呢?是元素返回值类型为指针的函数数组。有这样的函数数祖吗?不知道。所以必须括起来,以保证数组的每一个元素是指针。

}

第二种,蒙骗法:

尽管函数不是变量,但它在内存中仍有其物理地址,该地址能够赋给指针变量。获取函数方法是:用不带有括号和参数的函数名得到。
函数名相当于一个指向其函数入口指针常量。 那么既然函数名是一个指针常量,那么就可以对其进行一些相应的处理,如强制类型转换。
那么我们就可以把这个地址放在一个整形指针数组中,然后作为函数指针调用即可。


完整例子:
#include "stdio.h"
int add1(int a1,int b1);

int add2(int a2,int b2);

int main(int argc,char* argv[])

{

int numa1=1,numb1=2;

int numa2=2,numb2=3;

int (*op[2])(int a,int b);

op[0]=add1;

op[1]=add2;

printf("%d %d/n",op[0](numa1,numb1),op[1](numa2,numb2));

getch();

}

int add1(int a1,int b1)

{

return a1+b1;

}

int add2(int a2,int b2)

{

return a2+b2;

}


再给出常用的C变量的定义方式:
a) 一个整型数(An integer)
b) 一个指向整型数的指针(A pointer to an integer)
c) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a pointer to an integer)
d) 一个有10个整型数的数组(An array of 10 integers)
e) 一个有10个指针的数组,该指针是指向一个整型数的(An array of 10 pointers to integers)
f) 一个指向有10个整型数数组的指针(A pointer to an array of 10 integers)
g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as an argument and returns an integer)
h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数( An array of ten pointers to functions that take an integer argument and return an

integer )

答案是:
a) int a; // An integer
b) int *a; // A pointer to an integer
c) int **a; // A pointer to a pointer to an integer
d) int a[10]; // An array of 10 integers
e) int *a[10]; // An array of 10 pointers to integers
f) int (*a)[10]; // A pointer to an array of 10 integers
g) int (*a)(int); // A pointer to a function a that takes an integer argument and returns an integer
h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer

 

数组指针、指针数组、指针函数、函数指针比较

转载自: hongcha_717 注:优先级关系:() > [ ] > * 数组指针: 定义 int (*p)[n],()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的...
  • zhaojinjia
  • zhaojinjia
  • 2013年10月03日 10:29
  • 1232

深入理解指针数组 ,数组指针 ,函数指针 ,函数指针数组 ,指向函数指针数组的指针

/指针数组 示例:char *a[4] 理解:定义了一个数组,而它的每个元素的类型是一个指向字符/字符串的指针。 元素表示:char *a[i]   char *(a[i])是一样的,因为[]优...
  • wodeqingtian1234
  • wodeqingtian1234
  • 2016年04月27日 20:38
  • 1623

函数指针和函数指针数组及其应用

1. 函数指针 先来看一个简单的例子。 int a=3; void *p=&a; 这是一个基础的不能再基础的例子。相信学过指针的都能看得懂。P是一个指针,指向a。a 是一个整形变量。 函数指针和其类似...
  • yuexiang321
  • yuexiang321
  • 2016年09月25日 11:07
  • 1819

函数指针数组

  • 2012年06月27日 13:14
  • 38KB
  • 下载

多线程函数指针数组.rar

  • 2009年07月09日 09:31
  • 25KB
  • 下载

函数指针数组示例

  • 2014年10月11日 13:33
  • 3KB
  • 下载

数组指针,函数指针应用

  • 2015年10月29日 11:32
  • 1KB
  • 下载

函数指针、函数名、二维数组指针做形参

  • 2013年10月16日 11:25
  • 102KB
  • 下载

C++函数指针数组的使用方法

2015-11-24 一、   缘起 什么情况下,想到将函数指针数组来的呢?是由于近期写的一个程序中,有一系列顺序化的函数,且这些函数的形式基本一致,需要对每一步的执行结果进行判断,是否执行成功,...
  • u011462318
  • u011462318
  • 2015年11月24日 20:30
  • 3795

剑指offer_面试题14_调整数组顺序使奇数位于偶数前面(函数指针用法)

题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。 1、一般想法,不考虑时间复杂度: 每次遍历数组,碰到一个偶数就拿出来,将后面...
  • jwentao01
  • jwentao01
  • 2015年08月09日 21:06
  • 496
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:函数指针数组
举报原因:
原因补充:

(最多只允许输入30个字)