c语言函数返回指针指针,深入理解C语言中的指向函数的指针和返回指针的函数!...

#include

#include

/*

* 返回指针的函数和指向函数的指针

*/

/*

* 定义一个函数,返回一个void指针,在C语言中,void指针可以

* 指向任何类型

*/

void *func(){

/*

* 一种很容易犯的错误,将局部变量的地址返回

*/

int m;

printf("define as void *func()/n");

return &m;

}

/*

* 声明一个指向函数的指针,指向返回类型为void指针的函数

*/

void *(*pfunc)();

/*

void (*pfun)();

* 声明一个函数,指向一个返回void的函数。其实这个和第一种

* void *func()是大多数人最容易混淆的方式。总结中会介绍

* 分辨的方法。因为这种指针前面已经说过,这里不举例。

*/

int main(){

int *result;

pfunc=func;/*赋值*/

result=(int *)func();/*将void*转换成int**/

func();

pfunc();

return 0;

}

/*

* 编译上面这个程序,能够“正常”通过,但是会得到警告:返回了临时局部变量

* 地址,因为局部变量放在栈中,在函数结束时会被自动释放,如果你真的想要

* 在函数中使用局部变量来返回,那么可以使用malloc来分配内存地址,malloc

* 分配的内存属于进程的堆段,需要自己释放,或者程序运行结束后由C运行时

* 来释放。

* 最后,说说怎样区分下面这两个东东

*        char *func();

*        char (*func)();

*        记住函数()的结合性比指针*高,就可以很容易区分了,因为()高于*,所以

*        char *func()中的变量func是一个函数,进一步和普通函数char func()对比

*        你就可以将char *func()中的char *看成是有一个括号括起来了。而

*        char (*func)()中的func,由于加了括号,所以先和指针*结合,变成一个

*        指针,正如普通函数char function()中的function其实也是一个函数指针

*        一样,所以你可以将(*func)当成是一个普通变量。

*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值