4

C99 标准有uintptr_t一个推荐的整数类型来将数据指针(指向对象的指针)转换为,但我没有找到一个等效的整数类型来存储函数指针。我忽略了吗?

特定的编译器可以定义这样的类型,即使它不在标准中,但编译器更有可能声明函数指针可以存储在(比如说)a 中uint64_t,而不是定义新类型。

另一个区别是,在数据指针上进行整数运算是有意义的,而不是在函数指针上。一个常见的习惯用法是(int*)(((uintptr_t)p + 15) & ~(uintptr_t)15),但没有理由将此习惯用法应用于函数指针。

4

3 回答 3

3

我没有找到一个等效的整数类型来存储函数指针

那是因为您不能将函数指针转换为整数。这样做会导致未定义的行为。

于 2013-08-24T11:47:26.250 回答
3

函数指针没有这种整数类型可以转换。

原因之一是:在某些机器上,函数地址可能非常大,比任何数据指针都大。

于 2013-08-24T11:54:35.000 回答
3

不,没有这种推荐的指针类型。

存储指针,您可以使用任何其他函数指针类型,只要您不通过它调用您的函数。

如果您将指针转换回原始类型,则可以调用您的函数。这始终保证有效。

于 2013-08-24T11:45:58.163 回答