题目要求不允许改变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前面呢??
其实我看不懂!。。总有一天。。
总有一天你会变成高手:)