题目要求不允许改变main()函数,只能通过在test()函数中写代码来改变yy的值~~
[codesyntax lang=”c”]
void test(void) { //在这写代码 } void main() { int yy=1; test(); printf("%d",yy); }
[/codesyntax]
哈哈 当时看了这个题就觉得特别好玩 看了大家的回答更发现自己了解的知识还真是还有很大的欠缺哈 高人太多啦 哈哈哈哈~~~突然又很有奋斗的动力~~为成为计算机很NB的人而努力奋斗哈哈~~
附上几个参考答案,VC++ 6 编译通过。
答案一:
[codesyntax lang=”c”]
void test(void) { int *p; p=(int *)&p; while (*p!=1) { p++; } *p=88888888; }
[/codesyntax]
(PS:这是出题者自己公布的答案)
答案二:
[codesyntax lang=”c”]
void test(void) { #define yy 9999 #define int /##/##int }
[/codesyntax]
(PS:这个很赖皮的说~~哈哈)
答案三:
[codesyntax lang=”c”]
void test(void) { _asm { push ebp mov ebp,[ebp] mov dword ptr[ebp-4],0x00000003 //这个0x00000003就是覆盖了y的值 pop ebp } }
[/codesyntax]
(PS:我认为这是很标准的一个答案。)
我喜欢第二个答案.第一个答案在我看来是不对的.
虽然我不懂,但是我觉得。。。
怎么啦?很有意思是吧 嘿嘿
这个题是相当的有意思,自己估计是想不到啦!看来nb的人多的是,自己需要学的东西还有很多很多!
囧,看见答案二 很兴奋,以为这样也可以,但是发现gcc通过不了。
仅在VC下编译通过,gcc中,如果使用两个“##”就代表符号链接了,故编译不会通过的 :)
第一个
p=(int *)&p;
为什么p就一定会在yy前面呢??
其实我看不懂!。。总有一天。。
总有一天你会变成高手:)