据我所知,
在C99或更高版本中,是否有类似的有符号和无符号整数类型能够保存指向函数的指针?
uintptr_t
和intptr_t
可以用于保存任何指向void
的指针。因此,这些类型可以用于存储指向数据的指针。在C99或更高版本中,是否有类似的有符号和无符号整数类型能够保存指向函数的指针?
uintptr_t
和intptr_t
可以用于保存任何指向void
的指针。因此,这些类型可以用于存储指向数据的指针。不,没有这样的类型。
函数指针只能可靠地转换为其他函数指针类型(并且仅在指向正确的函数类型时才能解引用)。
在C语言中,将函数指针转换为整数的方法由6.3.2.3/6进行说明:
任何指针类型都可以转换为整数类型。除了先前指定的情况外,结果是实现定义的。如果结果无法在整数类型中表示,则行为未定义。结果不一定在任何整数类型的值范围内。
请注意,即使整数类型足够大,将其强制转换为整数,再转换回函数指针也不能保证检索到原始函数指针。
在C ++中,有关文本位于[expr.reinterpret.cast]点4和6。 行为类似,但它明确保证如果存在足够大小的整数,则将函数指针转换为整数并再次转换会检索到原始函数指针。
void *
和函数指针之间可能存在类似的转换(参见J.5.7)。 - too honest for this site_Static_assert(sizeof(uintptr_t) >= sizeof(func_pointer_t), "bleh");
。这样,这种转换只会在指针是与地址不同的其他系统上失败(在我看来,这些系统无论如何都值得崩溃)。 - Lundin
void *
。而且 C 和 C++ 是不同的编程语言。请将你的问题限制在其中一个语言上。 - too honest for this site