函数指针的应用
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;
}
函数指针: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;
}
相关文章推荐
- 第09天C语言(08):指向函数的指针的应用场景
- Delphi:记录类型、过程指针、函数(方法)指针字段的应用
- C++成员函数指针的应用(学习收录)
- C/C++高阶语法:函数指针及其应用,回调函数
- 委托与函数指针在原理应用上的部分区别
- c++中引用与指针在函数上的应用
- 指针铁律4/5:应用指针必须和函数调用相结合(指针做函数参数)
- C++成员函数指针的应用
- 谈函数指针的实际应用
- 指针的函数的应用
- 函数指针的应用
- 结构体变量、结构指针变量、结构数组作为函数的参数应用实例分析 .
- 关于函数指针的应用
- 函数指针应用・回调函数・转换表・
- 指针的引用——在函数中的巧妙应用
- 函数指针的应用比较排序与冒泡排序指针完成
- C++成员函数指针的应用
- C++成员函数指针的应用(转)
- 函数指针数组在ARM异常中断处理中的应用
- C函数指针应用之转移表(jump tables)