为什么允许从int转换为void*?

Avi*_*ash 2 c pointers casting

为什么在C中允许使用void*to int,反之亦然?这个用在哪里除了pthread

Sou*_*osh 5

它是允许的,但行为是实现定义的.

有时,在某些情况下(在特定平台/体系结构上),通过使用需要操作数的运算符,此规定对于涉及内存地址的快速和脏的黑客/技巧可能很有用.[例如:操作].对于有限内存嵌入式设备的内存优化非常有用.intXOR

引用有关功能的标准,

用于将指针转换为整数或整数到指针的映射函数旨在与执行环境的寻址结构一致.

相关阅读:c11第6.3.2.3章,

第5段:

整数可以转换为任何指针类型.除非先前指定,否则结果是实现定义的,可能未正确对齐,可能不指向引用类型的实体,并且可能是陷阱表示.

和第6段:

任何指针类型都可以转换为整数类型.除非先前指定,否则结果是实现定义的.如果结果无法以整数类型表示,则行为未定义.结果不必在任何整数类型的值范围内.