我试图理解什么是c中函数的指针。
我想要一些调用函数指针的详细过程,因此,我可以更好地理解函数指针。
有人可以解释一下为什么我下面的代码不会崩溃并且有一些有线输出吗?
为了缩小范围,我正在寻找类似 javap
的东西,它可以解释 jdk
如何编译
我的代码和 jvm
运行我的代码
- void 返回与数字 14,15 或 16 有何关系。 (void函数返回)
- 我的第二个参数是否存在安全问题,或者与非 init val 相同吗?
测试.c
#include <stdio.h>
#include <stdlib.h>
static void f(int x, int y){
printf("x = %d \n", x );
printf("y = %d \n", y );
}
typedef int (*FUNC)(int);
int main(void){
long int addr = (long int)f;
printf("%d \n", (int)((FUNC)addr)(1) );
return 0;
}
使用 i686-apple-darwin11-llvm-gcc-4.2 编译的 macOS 上的输出
x = 1
y = 1479046720
16
最佳答案
答案是未定义的行为。您正在使用两种不兼容的函数指针类型,并使用一种来调用另一种。 (更不用说将指针存储在整数等中)因此,您的程序会调用未定义的行为,因此任何事情都可能发生。你得到的值很可能只是来自困惑的堆栈和/或 CPU 寄存器的随机垃圾。
关于c - 理解调用函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14671778/