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

 

posted @ 2018-07-13 00:36  _年少有为  阅读(2195)  评论(2编辑  收藏  举报