也许是函数指针或转换问题.不确定

也许是函数指针或转换问题.不确定,第1张

概述这段代码中发生了什么? 我没有得到这个代码.看起来它正在执行某种类型的转换或使用函数指针,但我不确定.如果有人能帮助我,我将不胜感激.谢谢. const char string[]="Hello!";int main() { (*(void (*)()) string)(); //Obviously, my problem is this line :) return 这段代码中发生了什么?
我没有得到这个代码.看起来它正在执行某种类型的转换或使用函数指针,但我不确定.如果有人能帮助我,我将不胜感激.谢谢.

const char string[]="Hello!";int main()   {    (*(voID (*)()) string)(); //ObvIoUsly,my problem is this line :)    return 0;}
解决方法 首先,让我们使用 cdecl来解释内在的胡言乱语:

$cdeclcdecl> explain (voID (*)())cast unkNown_name into pointer to function returning voID

所以(voID(*)())string将字符串转换为函数指针.然后取消引用函数指针以调用底层函数.这条线相当于

voID (*fp)() = (*(voID (*)()) string)();(*fp)();

这(在大多数机器上)尝试执行“Hello!”作为机器代码.它可能会在具有虚拟内存的计算机上彻底崩溃,因为数据通常标记为不可执行.如果它没有崩溃,它就不可能做任何连贯的事情.无论如何,这不是有用的代码.

这里唯一要学习的是cdecl工具可以用于理解或编写复杂的C类型和声明.

总结

以上是内存溢出为你收集整理的也许是函数指针或转换问题.不确定全部内容,希望文章能够帮你解决也许是函数指针或转换问题.不确定所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1213067.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存