简要说明C语言中指针函数与函数指针的区别

2025-05-27 0 100

指针函数一般是指返回指针的函数;

?

1

2

3

4

5

6

7

8

9

10

11

12

13
#include <stdio.h>

int* fun(int *a)

{

return a;

}

int main(int argc, char **argv)

{

int a = 3;

printf("%d", *(fun(&a)));

return 0;

}


函数指针是表示指向函数开始地址的指针:
首先要了解函数的调用过程:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15
#include <stdio.h>

int fun(int i)

{

return i + 1;

}

int main(int argc, char **argv)

{

int r;

//r = fun(5);

r = (*fun)(5); //调用方式

printf("%d\\n", r);

return 0;

}

函数可以用r = (*fun)(5);来调用,说明函数名其实是一个指针,
通过(*fun)来寻址。所以我们就可以定义一个指针

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17
#include <stdio.h>

int fun(int i)

{

return i + 1;

}

int main(int argc, char **argv)

{

int r;

int (*funP)(int); //声明指针

//funP = fun; //给指针赋值

funP = &fun;

r = funP(5);

printf("%d\\n", r);

return 0;

}


所以,给函数指针赋值也有两种方式;
同样,通过函数指针调用函数的方式也有两种:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17
#include <stdio.h>

int fun(int i)

{

return i + 1;

}

int main(int argc, char **argv)

{

int r;

int (*funP)(int); //声明指针

funP = fun; //给指针赋值

//r = funP(5);

r = (*funP)(5); //调用

printf("%d\\n", r);

return 0;

}

也就是说,除了声明的地方,fun()与(*fun)()的作用是一样的。
这样,也就让C语言容易实现类似于回调函数的结构:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26
#include <stdio.h>

int funA(int i)

{

return i + 1;

}

int funB(int i)

{

return i - 1;

}

void fun(int (*funP)(int), int i)

{

printf("%d\\n", funP(i));

}

int main(int argc, char **argv)

{

int (*funP)(int); //声明指针

funP = funA; //给指针赋值

//funP = funB; //给指针赋值

fun(funP, 5); //调用

return 0;

}

在fun()函数里,它做的只是在某个时候调用一个funP指针指向的函数,至于是哪个函数,在fun函数的定义处还无从得知;直到将funA赋给函数指针funP,funP具体要做什么功能,才得以确定。
也就是说,main函数决定fun函数需要帮它实现什么函数代码,但是fun何时调用以及是否调用main给他的函数,那是由fun()来决定。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 简要说明C语言中指针函数与函数指针的区别 https://www.kuaiidc.com/75199.html

相关文章

发表评论
暂无评论