您的位置:首页 > 其它

函数指针的应用

2012-09-28 18:43 183 查看
注意:函数指针与指针函数的区别

函数指针:T (*p)(parameter……)

指针函数:T* p(parameter……)

/*

*指针与函数、函数指针

* 函数也是在内存中执行的,因此也有地址,函数的大小不是由函数返回类型决定的,

*函数地址不允许其做数学运算,但可以对函数地址赋值和调用函数。

* 函数名就是函数的地址,也是函数开始执行的地方。

*/

#include <iostream>

using namespace std;

int Max(int a, int b)

{

if(a < b)

return b;

else

return a;

}

void print(int* p){ cout << *p << ' '; }

void clear(int* p){ *p = 0; }

void mul(int* p) { *p *= 10; }

void add(int* p) { *p += 16;}

void fill(int* p)

{

static int n = 0;

*p = ++n;

}

void foreach(int* arr, int n, void (*fp)(int* p))

{//通过函数的指针变量调用函数

for(int i = 0; i != n; i++)

(*fp)(arr+i);

//cout << endl;

}

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

{

//用指向函数的指针变量调用函数

/*其实函数它也是有地址的,一个函数在编译时,

系统会分配给它一个入口地址,而这个入口地址就是函数的指针*/

/*if(argc < 1) return 0;

int (*p)(int , char* arr[]);

p = &main;

cout << "主函数的地址:" << main << endl;

(*p)(argc-1,argv);*/

//用函数指针调用判断两个数最大值的函数

/*int a,b;

cout << "输入两个整数a,b:";

cin >> a >> b;

int (*p)(int , int ); //p就是所谓的函数指针

p = Max;

cout << p(a,b) << endl;*/

int arr[5];

int i;

foreach(arr,5,print); //for(i = 0; i != 5; i++) print(arr+i);

cout << endl;

foreach(arr,5,fill); //for(i = 0; i != 5; i++) fill(arr+i);

foreach(arr,5,print); //for(i = 0; i != 5; i++) print(arr+i);

cout << endl;

foreach(arr,5,add); //for(i = 0; i != 5; i++) add(arr+i);

foreach(arr,5,print); //for(i = 0; i != 5; i++) print(arr+i);

cout << endl;

foreach(arr,5,clear); //for(i = 0; i != 5; i++) clear(arr+i);

foreach(arr,5,print); //for(i = 0; i != 5; i++) print(arr+i);

cout << endl;

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: