指针函数与函数指针数组
2012-07-10 16:20
176 查看
“指针函数”是指返回值是指针的函数。
Example:
#include<iostream>
using namespace std;
void main()
{
float *find(float(*pionter)[4],int n); /* 函数声明 */
static float score[][4]={{60,70,80,90},{56,89,34,45},{34,23,56,45}};
float *p;
int i,m;
cout<<"Enter the number to be found:";
cin>>m;
p=find(score,m);
for(i=0;i<4;i++)
cout<<" "<<*(p+i);
}
float *find(float(*pionter)[4],int n)/*定义指针函数*/
{
float *pt;
pt=*(pionter+n);
return(pt);
}
============================================================
“函数指针数组”首先它是个数组,不过数组的元素是函数指针。“函数指针”是指向函数的指针变量。
Example:
#include <stdio.h>
int add1(int a1,int b1); /*函数声明*/
int add2(int a2,int b2); /*函数声明*/
void main()
{
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));
}
int add1(int a1,int b1)
{
return a1+b1;
}
int add2(int a2,int b2)
{
return a2+b2;
}
======================================================
为函数指针数组赋值:
为函数指针数组赋值有两种方式:静态定义和动态赋值。
1.
静态定义
在定义函数指针数组的时候,已经确定了每个成员所对应的函数。例如:
void (*INTARRAY[])(void) = {Stop,Run,Jump};
从根本上讲函数指针数组依然是数组,所以和数组的定义类似,由于是静态赋值,[ ]里面的数字可以
省略。这个函数指针数组的成员有三个。
INTARRAY[1](); //执行Run函数
2.
动态赋值
也可以先定义一个函数指针数组,在需要的时候为其赋值。为了还原它本来的面目,我们先对这个执行特定类型的函数指针进行类型重定义,然后再用这个新数据类型来定义数组。如下:
typedef void (*INTFUN)(void); //此类型的函数指针指向的是无参、无返回值的函数。
INTFUN INTARRAY[32]; //定义一个函数指针数组,其每个成员为INTFUN类型的函数指针
INTARRAY[10] = INT_TIMER0; //为其赋值
INTARRAY[10](); //调用函数指针数组的第10个成员指向的函数
Example:
#include<iostream>
using namespace std;
void main()
{
float *find(float(*pionter)[4],int n); /* 函数声明 */
static float score[][4]={{60,70,80,90},{56,89,34,45},{34,23,56,45}};
float *p;
int i,m;
cout<<"Enter the number to be found:";
cin>>m;
p=find(score,m);
for(i=0;i<4;i++)
cout<<" "<<*(p+i);
}
float *find(float(*pionter)[4],int n)/*定义指针函数*/
{
float *pt;
pt=*(pionter+n);
return(pt);
}
============================================================
“函数指针数组”首先它是个数组,不过数组的元素是函数指针。“函数指针”是指向函数的指针变量。
Example:
#include <stdio.h>
int add1(int a1,int b1); /*函数声明*/
int add2(int a2,int b2); /*函数声明*/
void main()
{
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));
}
int add1(int a1,int b1)
{
return a1+b1;
}
int add2(int a2,int b2)
{
return a2+b2;
}
======================================================
为函数指针数组赋值:
为函数指针数组赋值有两种方式:静态定义和动态赋值。
1.
静态定义
在定义函数指针数组的时候,已经确定了每个成员所对应的函数。例如:
void (*INTARRAY[])(void) = {Stop,Run,Jump};
从根本上讲函数指针数组依然是数组,所以和数组的定义类似,由于是静态赋值,[ ]里面的数字可以
省略。这个函数指针数组的成员有三个。
INTARRAY[1](); //执行Run函数
2.
动态赋值
也可以先定义一个函数指针数组,在需要的时候为其赋值。为了还原它本来的面目,我们先对这个执行特定类型的函数指针进行类型重定义,然后再用这个新数据类型来定义数组。如下:
typedef void (*INTFUN)(void); //此类型的函数指针指向的是无参、无返回值的函数。
INTFUN INTARRAY[32]; //定义一个函数指针数组,其每个成员为INTFUN类型的函数指针
INTARRAY[10] = INT_TIMER0; //为其赋值
INTARRAY[10](); //调用函数指针数组的第10个成员指向的函数
相关文章推荐
- 指针数组,数组指针,指针函数,函数指针
- 理解数组,结构 ,函数指针,指针函数,数组指针,指针数组,结构指针的定义和实现
- 函数指针—指针函数 数组指针—指针数组 类模板—模板类 函数模板——模板函数 的区别
- C语言 复杂指针的申明问题 数组指针 指针数组 函数指针 指针函数一览无遗! C/C++求职面试必备考点(四)
- 数组和指针、数组指针和指针数组、函数指针和指针函数、数组标识符的意义、静态和动态创建的数组的本质区别、标识符类型判断方法
- 指针函数、数组指针、函数指针、函数指针数组和指向函数指针数组的指针
- 指针数组,数组指针,指针函数,函数指针(转)
- 模板类、类模板、函数模板、模板函数、函数指针、指针函数、数组指针、指针数组
- (指针常量,常量指针)-(函数指针,指针函数)-(指针数组,数组指针)
- 指针数组、数组指针、指针函数、函数指针的简单介绍
- 数组指针,指针数组,函数指针,指针函数
- 指针函数与函数指针数组指针指针数组
- 指针常量、常量指针;指针数组、数组指针;指针函数、函数指针
- C语言 复杂指针的申明问题 数组指针 指针数组 函数指针 指针函数一览无遗! C/C++求职面试必备考点(四)
- 常量指针、指针常量、指针函数、函数指针、指针数组、数组指针区别在哪里?
- C语言02 - 指针运算、数组与指针、指针变量名、指针与函数参数、指针函数、函数指针、二级指针
- 指针, 指针的指针, 数组, 指针数组, 数组指针, 指针函数, 函数指针 C/C++中函数指针的含义
- [C++基础]那些容易被混淆的概念:函数/数组指针-指针函数/数组,类/函数模板-模板类/函数
- 指针数组、数组指针与指针函数、函数指针
- 指针常量和常量指针、函数指针和指针函数、指针数组和数组指针