2015.08.25函数指针

1、函数指针: 指向函数的指针就叫函数指针,由于函数名以存储名就是函数的首地址,即函数指针时指向函数名的指针
2、格式: 指针类型修饰符  * 指针变量名  = 初始值;
3、函数指针确定的步骤:
//第一步:将函数名去掉,用小括号星(*)替代
//    void (*)();   int (*)(int a,int b);
//第二步:若有参数,将参数名去掉,只保留参数类型;
 //  void (*)();   int (*)(int ,int );
4、   //定义函数指针变量需要注意的内容:1:确定函数指针的类型,2.指针变量名不能与函数重名,3.有参数的指针变量只写参数类型

————————————————————————————

注意:

1.一个函数的指针,必须确保该函数被定义且分配了内存,否则将指向空地址,这是指针的大忌。

2.函数指针的使用条件:参数、返回值都吻合‘

 

3.函数指针没有++或--的运算

 

4.函数指针作为参数的最好的例子就是回调函数

 

5.函数指针的使用

例:

void (*p)(int &, int &);

void cube(int &x, int &y)

{

x = x * x * x;

y = y * y * y;

}

void Test(void (*p)(int &, int &), int &a, int &b)

{

p(a, b);

cout<<a<<' '<<b<<endl;

}

int main()

{

int x = 2, y = 3;

p = cube;

p(x, y);//在主函数中使用函数指针

cout<<x<<' '<<y<<endl;

Test(p, x, y);//函数指针作为函数

return 0;

}

输出:

8 27
512 19683

用typedef可以简化函数指针的使用。

例:

typedef void (*p)(int &, int &);

void cube(int &x, int &y)

{

x = x * x * x;

y = y * y * y;

}

void Test(p vp, int &a, int &b)

{

vp(a, b);

cout<<a<<' '<<b<<endl;

}

int main()

{

int x = 2, y = 3;

p  vp = cube;

vp(x, y);//在主函数中使用函数指针

cout<<x<<' '<<y<<endl;

Test(vp, x, y);//函数指针作为函数

return 0;

}

输出:

8 27
512 19683

 

6.对于成员函数指针,注意以下几点

1)要在特定类的对象中调用成员函数指针

2)尽量利用typedef简化成员函数指针

3)尽量不用成员函数指针

 

7.数组名是数组第一个元素的指针。同理,函数名也是指向函数第一条指令的常量指针

程序编译后,每个函数都有个首地址,也就是函数第一条指令的地址。

如果用一个指针来保存这个地址,那么这个指针就是函数指针,该指针可以看作是函数名。

因此我们可以通过函数指针调用函数

 

8.int* func(int);

声明了一个带有整型参数的函数func,并返回一个整型的指针

声明了一个函数,返回一个指针

int (*func)(int);

声明一个int型的指针func,它指向一个函数,这个函数带有一个int型的参数,并返回int型的值。

声明一个指针,返回一个函数

 

9.使用函数指针,便于用户选择调用不同名字但是又类型和参数相同的函数

 

10.函数指针数组

void (*p[5])(int, int);

声明了一个有5个元素的数组指针,每个指针指向的是带有两个int参数且返回void的函数

转自:http://blog.csdn.net/qq_31810357

时间: 2024-08-03 16:43:42

2015.08.25函数指针的相关文章

2015.08.18函数

1.函数    函数定义的格式:确定返回值的数据类型 +函数名(形参列表)+{        //形参列表:一个函数可能需要多个参数,每个参数用逗号隔开               函数体:                 return;//有返回值的时候需要用return将数据返回:            } 2. 函数分为两种:第一种是库函数(系统提供的函数):第二种:由于系统提供的库函数是有限的,不能满足开发者的需要,开发者需要自己定义一些函数,这种有开发者自己定义的函数叫自定义函数 3.

2015.08.20情人节--指针

转自:http://blog.csdn.net/qq_31810357 1.内存中的最小存储单元叫字节,为了方便我们操作内存中的数据,生产商对每一个内存中的存储单元进行编号,这个编号叫做地址,地址其实就是指针,指针其实就是地址: 2. // &   取地址符号//&a  取到a的地址,并返回//  %p是地址的占位                                                                   printf("%p\n"

阿里云accessKey如何创建?~ 2015.08.25

选择导航条上面的ACCESSKeys(工单服务左边,我一开始也没注意到) 创建一下,然后同意   验证一下 收工

函数指针与指针函数的学习总结

函数指针是指向函数的指针,指针函数是指一个函数的返回值是一个指针,但下面的几道题还是感觉很迷惑.各位能否讲的详细点呢? (1) float(**def)[10]   def是什么? (2) double*(*gh)[10]   gh是什么? (3) double(*f[10])()   f是什么? (4) int*((*b)[10])    b是什么?这样老感觉有点乱,有什么窍门可以记得并理解的清楚一点么? ======================解答:   (1) def是一个指针, 指向

指针函数与函数指针

一. 在学习arm过程中发现这"指针函数"与"函数指针"容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义: 1.指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某一类型的指针      类型标识符    *函数名(参数表)       int *f(x,y);   首先它是一个函数,只不过这个函数的返回值是一个地址值.函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋

C语言函数指针的用法

函数指针是一种在C.C++.D语言.其他类 C 语言和Fortran 2003中的指针.函数指针可以像一般函数一样,用于调用函数.传递参数.在如 C 这样的语言中,通过提供一个简单的选取.执行函数的方法,函数指针可以简化代码. 函数指针只能指向具有特定特征的函数.因而所有被同一指针运用的函数必须具有相同的参数和返回类型. 本文地址:http://www.cnblogs.com/archimedes/p/3669872.html,转载请注明源地址. 下面的代码说明了一种初始化函数指针的方法: in

浅析结构体函数指针与内核设备驱动

最近在公司没什么事做,突然有来写写日志和博客,这种突发的灵感来自于我在学习内核驱动代码的时候发现了结构体的一种古老的初始化方法,多亏了尚观广州校区的叶老师在群里用心的给我文字讲解,让我明白了原来结构体初始化也可以用:冒号这样的方法.          其实在C语言中,冒号:的用法有很多,比如三目运算符   表达式?表达式1:表达式2 : 它的意思就是如果表达式成立,那么执行表达式1,否则执行表达式2 .还有一种就是广泛用于结构体的位段中,例如: Struct node { Int id : 2

函数指针与指针函数的使用与小结

/* ============================================================================ Name : TestFunction.c Author : lf Time : 2015年2月23日16:06:17 Copyright : Your copyright notice Description : 函数指针与指针函数的使用与小结 在C语言中: 函数名其实就是一个函数的起始地址. 同理:数组名其实就是数组首元素的地址. 函

详解C语言编程中的函数指针以及函数回调_C 语言

函数指针: 就是存储函数地址的指针,就是指向函数的指针,就是指针存储的值是函数地址,我们可以通过指针可以调用函数. 我们先来定义一个简单的函数: //定义这样一个函数 void easyFunc() { printf("I'm a easy Function\n"); } //声明一个函数 void easyFunc(); //调用函数 easyFunc(); //定义这样一个函数 void easyFunc() { printf("I'm a easy Function\n