深入理解C语言中的指向函数的指针和返回指针的函数-阿里云开发者社区

开发者社区> xumaojun> 正文

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

简介: #include#include/** 返回指针的函数和指向函数的指针*//** 定义一个函数,返回一个void指针,在C语言中,void指针可以* 指向任何类型*/void *func(){    /*     * 一种很容易犯的错误,将局部变量的地址返回     */    int m;    printf("define as void *func()\n");    return &m;}/** 声明一个指向函数的指针,指向返回类型为void指针的函数*/void *(*pfunc)();/*void (*pfun)();* 声明一个函数,指向一个返回void的函数。
+关注继续查看
#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)当成是一个普通变量。
*/

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
《C Primer Plus》读书笔记——数组和指针(1)
背景 此章笔记以读者有简单的C语言基础,对数组(array)、指针(pointer)有初步了解及应用,想扎实基础或深入探究为背景而写。 数组的使用 举个栗子: /*打印每月的天数(每四年错一次)*/ #include #define MONTHS 12 ...
904 0
怎么设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程
8361 0
C语言库函数rename
函数简介   功能: 给一个文件重命名   用 法: int rename(char *oldname, char *newname);   头文件:在Visual C++6.0中用stdio.h或者io.h   说明:用该函数可以实现文件移动功能,把一个文件的完整路径的盘符改一下就实现了这个文件的移动。
786 0
C++的函数对象优于函数指针地方
转载自:http://blog.csdn.net/huang_xw/article/details/7934156           在C++编程语言中,有很多功能都与C语言相通,比如指针的应用等等。
1652 0
小刚带你深入浅出理解Lua语言
前言这篇文章并不是针对某个知识点深入剖析,而是聚焦在Lua语言的关键知识点覆盖和关键使用问题列举描述。能够让学习者对Lua整体有个认识(使用一门新的语言不仅仅在用的时候适应它,而是知道怎么善于使用它),同时也可以作为一个工具文档在Lua中遇到具体问题的时候能从这里索引到相应的知识点和Lua的一些原理,得到启发。 1、Lua语言的特点简单的说Lua语言是一个可扩展的嵌入型的脚本语言。它具有以下的特点
18 0
C语言中使用大括号与给函数命名的正确方法(转载)
使用大括号的正确方法: 在C中,使用大括号的方法无所谓对还是错——只要每个开括号后都有一个闭括号,你的程序中就不再会出现与大括号有关的问题。
978 0
+关注
xumaojun
乐于学习与分析
1079
文章
95
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载