• 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的地址,却并不调用该函数。

  • 相关阅读:
    CF-478C
    HDU-2074-叠筐
    HDU-2037-今年暑假不AC
    POJ-2785-4 Values whose Sum is 0
    HDU-1160-FatMouse's Speed
    HDU-1297-Children’s Queue
    Redis客户端管理工具的安装及使用
    Redis客户端管理工具,状态监控工具
    memcached可视化客户端工具
    javascript回调函数
  • 原文地址:https://www.cnblogs.com/dchnzlh/p/9780058.html
Copyright © 2020-2023  润新知