注册 登录
编程论坛 VC++/MFC

大家猜猜结果是什么

yuccn 发布于 2012-04-20 21:04, 477 次点击
对堆栈有兴趣的大伙们猜猜看运行的结果是什么,想不出可以拿去运行看看,如果意料的结果和运行的结果相同,并且明白为什么回这样,那么恭喜你,你的水平已经是一般之上了(——请允许我怎么说,因为我的水平就是一般的,也就是说在我的之上咯。^_^)
如果运行的结果不是你意料的,那么,一起加油吧,如果程序是我们的爱好,那么这些都将不是问题。


#include "stdafx.h"
int nMain = 0;
void Test()
{
    int *ptr = NULL;
    ptr = (int *)&ptr;
    printf("Test say hello!\n");
    ptr++;

#ifdef _DEBUG
    ptr++;
    ptr++;
#endif
    getchar();
    *ptr = nMain;
}

void main()
{
    int *ptr = NULL;
    ptr = (int *)&ptr;

    printf("main say hello!\n");
    ptr++;

#ifdef _DEBUG
    ptr++;
    ptr++;
#endif
    nMain = *ptr;
    *ptr = (int)Test;
}


[ 本帖最后由 yuccn 于 2012-4-21 07:54 编辑 ]
4 回复
#2
yuccn2012-04-22 11:29
100分都没有人来拿啊!
#3
hahayezhe2012-04-23 08:55
我会告诉你其实我不会 只是来接分的么!
#4
yuccn2012-04-23 21:52
可以拿来运行看看结果的,^_^

估计分数是你的了
#5
马甲1号2012-04-24 13:05
那是堆栈平衡 - -
通过堆栈空间的自动变量指针, 指向自己, 然后保存堆栈地址到全局变量nMain(保存现场), 然后就用"变量"进行函数调用

ps: Release版编译, OD跟踪一下, 就明白了
1