C++学习之函数指针
2014-03-22 14:48
218 查看
C++学习之函数指针
和数据项类似,函数也有地址,函数的地址是存储在机器语言代码的内存的开始地址。通常,这些地址对用户而言,不重要也没什么用处,但对程序而言,它却很有用。
一、函数地址
函数地址的获取很容易:只要使用函数名即可。也就是说,如果think()是一个函数,那么他的函数名think就是该函数的地址,要将函数作为参数进行传递,必须传递函数名字,一定要区分传递的是函数的地址还是函数的返回值:如下面所示:
prosess(think):传递的是think函数的地址;
prosess(think()):传递的是think函数的返回值;
二、声明函数指针
声明指向某种数据类型的指针的时候,必须指定指针指向的类型。同样,声明指向函数的指针的时候,也必须指定指针指向的函数类型。这意味着声明应该指定函数的返回类型以及函数的特征值(参数列表)。也就是说,声明应该像函数原型那样指出有关函数的信息:
double pam(int);
则正确的指针类型声明如下:
double (*pf)(int);pf是指向pam函数的指针,而*pf则指向的是pam()函数;
为了提供正确的操作符优先级,必须在声明中使用括号将*pf括起来,括号的优先级比*操作符高,因此*pf(int)意味着pf()是一个返回指针的函数,而(*pf)(int)则意味着pf是一个指向函数的指针:
三、使用指针来调用函数
使用指针调用函数的线索来自指针声明。前面说过,(*pf)扮演的角色和函数名相同,因此使用(*pf)的时候,只需要将它看作是函数名即可.
和数据项类似,函数也有地址,函数的地址是存储在机器语言代码的内存的开始地址。通常,这些地址对用户而言,不重要也没什么用处,但对程序而言,它却很有用。
一、函数地址
函数地址的获取很容易:只要使用函数名即可。也就是说,如果think()是一个函数,那么他的函数名think就是该函数的地址,要将函数作为参数进行传递,必须传递函数名字,一定要区分传递的是函数的地址还是函数的返回值:如下面所示:
prosess(think):传递的是think函数的地址;
prosess(think()):传递的是think函数的返回值;
二、声明函数指针
声明指向某种数据类型的指针的时候,必须指定指针指向的类型。同样,声明指向函数的指针的时候,也必须指定指针指向的函数类型。这意味着声明应该指定函数的返回类型以及函数的特征值(参数列表)。也就是说,声明应该像函数原型那样指出有关函数的信息:
double pam(int);
则正确的指针类型声明如下:
double (*pf)(int);pf是指向pam函数的指针,而*pf则指向的是pam()函数;
为了提供正确的操作符优先级,必须在声明中使用括号将*pf括起来,括号的优先级比*操作符高,因此*pf(int)意味着pf()是一个返回指针的函数,而(*pf)(int)则意味着pf是一个指向函数的指针:
三、使用指针来调用函数
使用指针调用函数的线索来自指针声明。前面说过,(*pf)扮演的角色和函数名相同,因此使用(*pf)的时候,只需要将它看作是函数名即可.
相关文章推荐
- C++学习笔记18——指向函数的指针
- C/C++中关于地址、指针和引用变量的学习笔记(四) : 函数
- 【C++基础学习】引用和指针、重载、函数、内存管理
- Java程序员学习C++之函数指针
- C++引用数组,函数指针,函数指针数组,结构体数组等学习
- C/C++学习(4)函数与指针取地址符
- C++学习笔记之 函数重载和函数指针在一起
- 学习c++中虚函数、纯虚函数、指针
- C++ 学习笔记(6)函数、局部静态对象、重载函数、内联函数、constexpr函数、调试帮助、函数匹配、函数指针
- C++学习基础十七-- 函数指针
- c++学习笔记-----函数指针
- c++学习 函数指针
- C++学习之普通函数指针与成员函数指针
- C++ 学习笔记(19)new/delete表达式、定位new、typeid、dynamic_cast、type_info、枚举类型、成员函数指针、union、位域、volatile限定符、链接指示
- 【C++】【学习笔记】【未成功实现】关于指针的函数【very difficult】
- c++学习笔记(一):函数指针的使用
- C/C++学习之C提高----函数调用模型、指针做函数参数、字符串的基本操作、一级指针内存模型建立
- C++学习笔记(3)——成员变量、成员函数的指针
- c++学习笔记 内存四区 函数调用模型 指针强化
- c++中的函数对象与函数指针学习