typedef的高级用法---------理解函数声明

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

相关文档
最新文档