很有趣的一道C语言题

题目要求不允许改变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:我认为这是很标准的一个答案。)


9 条评论

  1. 落单的毛毛虫说道:

    其实我看不懂!。。总有一天。。

  2. 落单的毛毛虫说道:

    第一个
    p=(int *)&p;
    为什么p就一定会在yy前面呢??

  3. t.w.说道:

    囧,看见答案二 很兴奋,以为这样也可以,但是发现gcc通过不了。

  4. jiwanqiang说道:

    这个题是相当的有意思,自己估计是想不到啦!看来nb的人多的是,自己需要学的东西还有很多很多!

  5. 舒友阁说道:

    虽然我不懂,但是我觉得。。。

  6. lifishake说道:

    我喜欢第二个答案.第一个答案在我看来是不对的.

发表评论

(必填)

(必填)

(以便回访)