zoukankan      html  css  js  c++  java
  • typedef的高级用法---------理解函数声明

    最近在看《c陷阱与缺陷》这本书  第一张就介绍了函数声明,才知道函数指针可以声明,怎么样声明。

    首先 typedef 书上的用法就是,用声明表达式的标识符作为其标识符类型对应的别名。

    例如

        typedef int a;
        /*
        此时a就是int 类型的别名
        */
        typedef char fuc[10];
        /*
        fuc 代表一个长度为10的字符数组名(字符指针)类型
        */
        typedef void (*fp)(int);
        /*
        fp 代表一个函数指针,该指针指向的函数为   返回值为void,参数为一int类型的函数;
        */

    其中书上有一个例子

    一个signal函数, signal函数接受两个参数一个代表需要"被捕获"的特定signal的整数值,另一个是指向用户提供的函数指针,该函数用于处理“捕获到”的特定signal,返回值类型为void ,signal函数返回值为函数指针该函数指针类型与第二个参数相同。

    如果要直接声明

    void (*signal(int ,void(*)(int)))(int);

    大部分程序员都这段代码就很费劲了。

    如果用typedef就很容易明白了

    typedef void (*fp)(int);
    fp signal(int,fp);

    最后几个c函数的特殊方面

    1.func是个函数名,func的值是函数的地址,&func的值也为函数地址;(*func)(something)为调用对应函数,(*(&func))(something)调用对应的函数,但一般都倾向于用二种写法,符合普通指针的定义。

    2.任何变量使用前都需要声明,包括函数。

    3. c语言要求:在函数调用时即使不带参数,也应该包括参数列表,因此如果f是一个函数。

    f();

    是一个函数调用语句,而

    f;

    却是一个什么都不做的语句,更精确的说,这个语句计算函数f的地址,却并不调用该函数。

  • 相关阅读:
    mybatis
    Hello mybatis
    linux各种终端类型的区别和概念
    页面对象的定位
    laravel 操作 redis
    Python应用与实践
    Mysql与Oracle区别
    PHP 中 call_user_func 函数 和 call_user_func_array 函数的区别
    php依赖注入
    Linux/Unix 怎样找出并删除某一时间点的文件
  • 原文地址:https://www.cnblogs.com/dchnzlh/p/9780058.html
Copyright © 2011-2022 走看看