加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 09:29:19 所属栏目:百科 来源:网络整理
导读:这段代码中发生了什么? 我没有得到这个代码.看起来它正在执行某种类型的转换或使用函数指针,但我不确定.如果有人能帮助我,我将不胜感激.谢谢. const char string[]="Hello!";int main() { (*(void (*)()) string)(); //Obviously,my problem is this line :
这段代码中发生了什么?
我没有得到这个代码.看起来它正在执行某种类型的转换或使用函数指针,但我不确定.如果有人能帮助我,我将不胜感激.谢谢.

const char string[]="Hello!";

int main()   
{

    (*(void (*)()) string)(); //Obviously,my problem is this line :)

    return 0;
}

解决方法

首先,让我们使用 cdecl来解释内在的胡言乱语:

$cdecl
cdecl> explain (void (*)())
cast unknown_name into pointer to function returning void

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

void (*fp)() = (*(void (*)()) string)();
(*fp)();

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读