在 C 中,您可以将函数指针放入空指针数组中,然后将它们转换回任何类型的函数指针:
extern int (*fn1)(void);
extern void (*fn2)(int);
void foo(void)
{
void *array[2];
int i;
/* implicit cast from function pointer to void pointer */
array[0] = fn1;
array[1] = fn2;
for (i = 0; i < 2; i++)
{
int (*fp)(int, int, int);
/* implicit cast from void pointer to function pointer */
fp = array[i];
/* call function with a different signature */
fp(1, 2, 3);
}
}
我需要在 Go 中做同样的事情,使用 unsafe.Pointers。问题是:
Go 函数指针可以转换为 unsafe.Pointer 吗?
unsafe.Pointer 可以转换为与原始函数指针不同(或相同)类型的 Go 函数指针吗?
(问题不是我为什么或是否需要这样做;在给定的情况下,可以使用错误的参数集调用函数并误解返回值,因为调用者和被调用者能够处理这种情况。 )
慕田峪7331174
跃然一笑
相关分类