Closed. This question is off-topic. It is not currently accepting answers. Learn more
想改进这个问题吗?Update the question所以堆栈溢出的值小于aa>。
6年前关闭。
我在为一个嵌入式系统写代码编译器是GCC派生的。
以下代码是否正确?
void *voidPointer = 0;
int (*functionPointer)(int a);

int testFunction(int a)
{
   return(a+1);
}

void registerFunction(void *pvFunctionAddress)
{
   voidPointer = pvFunctionAddress;
}

main()
{
   ...
   registerFunction(testFunction);
   functionPointer = voidPointer;
   x = functionPointer(17);
   ...
}

现在x的值应该是18。
编译器没有显示错误-但这是正确的吗?
或者覆盖堆栈上的一些内存。
谢谢。

最佳答案

不,它永远不会是“正确的”,因为严格地说C禁止void *和函数指针之间的转换。
如果它可以工作,那是因为特定的编译器允许它用于特定的目标(操作系统+硬件组合)。

08-19 18:41