C语言函数和指针的关系之三(完结)
  3TFSCw4fNxMj 2023年11月02日 55 0


 指针保存函数的地址(函数指针)

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);
。。。。
}

C语言函数和指针的关系之三(完结)_整型

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<stdio.h>
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 < y)
temp = x;
else
temp = y;
return temp;
}
int add(int x, int y)
{
return x + y;
}
int 
{
return x - y;
}
int mux(int x, int y)
{
return x * y;
}
int main()
{
int(*p[5])(int, int) = {mux,min,add,sub,mux};
int num;
num = (*p[2])(10,20);
printf("num=%d\n", num);
return 0;
}

C语言函数和指针的关系之三(完结)_函数指针_02

6、函数指针应用举例

给函数传参

#include<stdio.h>
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 =%d\n",num);
num = process(sub,2,3);
printf("num =%d\n",num);
num = process(mux,2,3);
printf("num =%d\n",num);
num = process(dive,2,3);
printf("num =%d\n",num);
return 0;
}

C语言函数和指针的关系之三(完结)_整型_03



【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
3TFSCw4fNxMj