C99 标准有uintptr_t
一个推荐的整数类型来将数据指针(指向对象的指针)转换为,但我没有找到一个等效的整数类型来存储函数指针。我忽略了吗?
特定的编译器可以定义这样的类型,即使它不在标准中,但编译器更有可能声明函数指针可以存储在(比如说)a 中uint64_t
,而不是定义新类型。
另一个区别是,在数据指针上进行整数运算是有意义的,而不是在函数指针上。一个常见的习惯用法是(int*)(((uintptr_t)p + 15) & ~(uintptr_t)15)
,但没有理由将此习惯用法应用于函数指针。