指针保存函数的地址(函数指针)
1、函数指针的概念: 咱们定义的函数,在运行程序的时候,会将函数的指令加载到内存 的代码段。所以函数也有起始地址。
c 语言规定:函数的名字就是函数的首地址,即函数的入口地址 咱们就可以定义一个指针变量,来存放函数的地址。 这个指针变量就是函数指针变量。
2、函数指针的用处: 函数指针用来保存函数的入口地址。 在项目开发中,我们经常需要编写或者调用带函数指针参数的函数。
比如 Linux 系统中创建多线程的函数,它有个参数就是函数指针,接收线程函数的入口地址,即创建线程 成功后,新的任务执行线程函数。
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg)
void *thread_fun1(void *arg)
{
}
void * thread_fun2(void *arg)
{
}
int main()
{
pthread_t tid1,tid2;
pthread_create(&tid1,NULL,thread_fun1,NULL);
pthread_create(&tid2,NULL,thread_fun2,NULL);
。。。。
}
3、函数指针变量的定义
返回值类型(*函数指针变量名)(形参列表);
int(*p)(int,int);//定义了一个函数指针变量 p,p 指向的函数 必须有一个整型的返回值,有两个整型参数。
int max(int x,int y) { }
int min(int x,int y) { }
可以用这个 p 存放这类函数的地址。
p=max;
p=min;
4、调用函数的方法
1.通过函数的名字去调函数(最常用的)
int max(int x,int y) { }
int main() {
int num;
num=max(3,5); }
2.可以通过函数指针变量去调用
int max(int x,int y) { }
int main() {
int num;
int (*p)(int ,int);
p=max;
num=(*p)(3,5); }
5、函数指针数组
概念:由若干个相同类型的函数指针变量构服务器托管网成的集合,在内存中连续的顺序存储。 函数指针数组是个数组,它的每个元素都是一个函数指针变量。
函数指针数组的定义:
类型名(*数组名[元素个数])(形参列表)
int(*p[5])(int,int); 定义了一个函数指针数组,数组名是 p,有 5 个元素 p[0] ~p[4],每个元素都是函数指针变量, 每个函数指针变量指向的函数,必须有整型的返回值,两个整型参数。
例:
#include
int max(int x, int y)
{
int temp;
if (x > y)
temp = x;
else
temp = y;
return temp;
}
int min(int x, int y)
{
int temp;
if (x
6、函数指针应用举例
给函数传参
#include
int add(int x,int y)
{
return x+y;
}
int sub(int x,int y)
{
return x-y;
}
int mux(int x,int y)
{
return x*y;
}
int dive(int x,int y)
{
return x/y;
}
int process(int (*p)(int ,int),int a,int b)
{
int ret;
ret = (*p)(a,b);
return ret;
}
int main()
{
int num;
num = process(add,2,3);
printf("num =%dn",num);
num = process(sub,2,3);
printf("num =%dn",num);
num = process(mux,2,3);
printf("num =%dn",num);
num = process(dive,2,3);
printf("num =%dn",n服务器托管网um);
return 0;
}
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); ImageView.ScaleType共八种: 1·ImageView.ScaleType.center:图片位于视图中间,但不执行缩放。 2…