首先注意这是一个联合体。真正使用起来,事实上第一个就足够了,也就是void *,后面三个都可以用这个给“包装”起来,因为void * 是c里头的“泛型”。
楼主不妨思考为什么会这么设计。以网络编程为例,当设计处理数据包的回调函数的时候,通常你面对的数据类型都是不确定的,依赖于数据包的结构。如果让你来设计epoll_data_t,你会怎么设计???三思~~
如果我设计的话,直接一个void *搞定,就如同线程函数一样,线程函数的参数仍然是void *霸气外露。
只不过设计epoll_data_t的人可能考虑了一些最最常用的情况,比如,如果你写个网络程序只是随意测试用用,那么传一个int fd就OK了,后面的两位以此类推。
所以最后这个结构设计出来就是你现在看到的样子了。
总之呢,void *这一项是绝对不可少的,原因省略一万字。。。