gpt4 book ai didi

c - 理解调用函数指针

转载 作者:行者123 更新时间:2023-11-30 21:14:31 25 4
gpt4 key购买 nike

我试图理解什么是c中函数的指针。

我想要一些调用函数指针的详细过程,因此,我可以更好地理解函数指针。

有人可以解释一下为什么我下面的代码不会崩溃并且有一些有线输出吗?为了缩小范围,我正在寻找类似 javap 的东西,它可以解释 jdk 如何编译我的代码和 jvm 运行我的代码

  1. void 返回与数字 14,15 或 16 有何关系。(void函数返回)
  2. 我的第二个参数是否存在安全问题,或者与非 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com