gpt4 book ai didi

c - C 中的函数指针如何工作? - 具体例子

转载 作者:行者123 更新时间:2023-11-30 20:58:21 27 4
gpt4 key购买 nike

所以,我意识到这个问题之前已经被问过。我还是不明白以下内容:

#include <stdio.h>

main() {
volatile int (*fp)();
char buffer[64];
fp = 0;

if(fp){
printf("Buffer Overflow, jumping to %p", fp);
fp();
}
}

第一行声明函数指针fp。第三行向函数指针建议值 0,该值应相当于地址 0 (&0)。现在这是指针指向的内存地址的内容。因此,if 语句永远不应该成为 true。不过,如果成真,它就会被执行。如果执行了,printf 函数将打印现在存储在我的指针 fp 中的地址。

但是最后一行(fp())在做什么?对我来说,看起来好像我试图调用函数 fp() 我的指针 fp 指向的地址。但这段代码中并没有定义这个函数。那么,这是在做什么呢?

最佳答案

volatile 限定符表示fp的值可能随时改变在此函数中代码的控制之外(此阻止编译器对 fp 执行某些优化)。在实践中,您可以对已内存映射的内容、可以通过中断或类似内容修改的全局内容使用限定符。在这个特定的实例中,没有理由期望 fp 会被该代码外部的某些内容更改。

但是,代码的目的是if fp 以某种方式更改为非NULL 值(即设置为指向一个函数),那么这段代码将打印该指针值,然后执行指向的函数

关于c - C 中的函数指针如何工作? - 具体例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52993859/

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