返回指针的函数与指向函数的指针的用法

返回指针的函数与指向函数的指针的用法

#include<stdio.h>

#include<stdlib.h>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)当成是一个普通变量。*/

学习不是人生的全部,但学习都征服不了,那我还能做什么?

返回指针的函数与指向函数的指针的用法

相关文章:

你感兴趣的文章:

标签云: