首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

大家伙儿来看一段好玩的代码

2013-01-04 
大家来看一段好玩的代码,并想想为什么。[解决办法]#include iostream#include cstdlibusing namespace

大家来看一段好玩的代码
,并想想为什么。
[解决办法]

#include <iostream>
#include <cstdlib>

using namespace std;

void a()
{
printf("Hello World!\n");
}

int main()
{
typedef int (*fun)();
fun tmp = (fun)a;
printf("0x%x\t0x%x\n",tmp,&a);
if(tmp())
{
printf("a is ok!\n");
}
else 
{
printf("a is not ok!\n");
}
system("pause");
}

其实void函数和其他类型的函数是一样的,也有返回值,只是编译器没有取它的返回值而已,返回值一般存在eax里面,a跳进去后,至少会调用一个printf,printf里面肯定会用到eax,至于是不是0就不知道了,如果编译器在最后加xor eax,eax,那返回值就是0,但是这个不是,至少用vc不是,printf结束后eax里面的值是0x0D,所以返回了0x0D。上面的就会输出a is ok!
不过这种不确定的,了解就好,没什么实际意义。

热点排行