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

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

#include

int* fun(int *a)

{

return a;

}

int main(int argc, char **argv)

{

int a = 3;

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

return 0;

}

函数指针是表示指向函数开始地址的指针:

首先要了解函数的调用过程:

#include

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)来寻址。所以我们就可以定义一个指针

#include

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;

}

所以,给函数指针赋值也有两种方式;

同样,通过函数指针调用函数的方式也有两种:

#include

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语言容易实现类似于回调函数的结构:

#include

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值