不用循环和分支结构输出1-1000

小笨同学 2011-10-29 06:31:16
从stackoverflow上看到的,看有谁能解释下么?看完答案后令人拍案叫绝,当然,实际应用中应当避免这样的代码。
#include <stdio.h>
#include <stdlib.h>

void main(int j) {
printf("%d\n", j);
(&main + (&exit - &main)*(j/1000))(j+1);
}
...全文
209 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
小笨同学 2011-10-29
  • 打赏
  • 举报
回复
嗯,也是办法,不过,不像程序员的作风。
[Quote=引用 10 楼 proorck6 的回复:]

顺序、选择、分支 就这三种结构,你说两个都不能用,那就用顺序结构。
编个脚本,输出
printf("1");
printf("2");
...
printf("1000");
共1000行的一个程序,编译再执行。
[/Quote]
proorck6 2011-10-29
  • 打赏
  • 举报
回复
顺序、选择、分支 就这三种结构,你说两个都不能用,那就用顺序结构。
编个脚本,输出
printf("1");
printf("2");
...
printf("1000");
共1000行的一个程序,编译再执行。
小笨同学 2011-10-29
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 pathuang68 的回复:]

这不就是所谓传说中的“奇淫技巧”么?(注:俺特别留意了,“奇淫技巧”木有打错:))
[/Quote]
为啥要用“淫”来形容?另外,“void main..."写法在C99中不再支持,正确的写法是”int main...",此处贴这段代码只是为了研究用,代码本身并有实用,特此澄清,以免误导了部分看官。
自信男孩 2011-10-29
  • 打赏
  • 举报
回复
第一次看到主函数也这样调用,以后写代码还是中规中矩的好。
pathuang68 2011-10-29
  • 打赏
  • 举报
回复
这不就是所谓传说中的“奇淫技巧”么?(注:俺特别留意了,“奇淫技巧”木有打错:))
机智的呆呆 2011-10-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xxyxxb 的回复:]
退出条件是什么?

引用 4 楼 demon__hunter 的回复:

C/C++ code

#include <stdio.h>
#include <stdlib.h>

void main(int j)
{
printf("%d\n", j);
((void(*)(int))((int)&amp;main + ((int)&amp;exit - (i……
[/Quote]
((void(*)(int))((int)&main + ((int)&exit - (int)&main)*(j/1000)))(j+1);

j=1000时
((void(*)(int))((int)&main + ((int)&exit - (int)&main)*(j/1000)))(j+1);等同于
((void(*)(int))((int)&exit)(j+1);
调用了exit函数
小笨同学 2011-10-29
  • 打赏
  • 举报
回复
退出条件是什么?[Quote=引用 4 楼 demon__hunter 的回复:]

C/C++ code

#include <stdio.h>
#include <stdlib.h>

void main(int j)
{
printf("%d\n", j);
((void(*)(int))((int)&main + ((int)&exit - (int)&main)*(j/1000)))(j+1);
}


vc2008能编译通……
[/Quote]
机智的呆呆 2011-10-29
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <stdlib.h>

void main(int j)
{
printf("%d\n", j);
((void(*)(int))((int)&main + ((int)&exit - (int)&main)*(j/1000)))(j+1);
}

vc2008能编译通过。

再就是默认条件下c/c++运行时调用main函数时,argv参数为1,argv中即为程序名。
参数从右到左入栈。导致main函数第一次被c/c++运行时调用是实参j对应的分配空间恰好是argv对应的存储空间,所以第一次j被巧妙的初始化为1
ProgrammingRing 2011-10-29
  • 打赏
  • 举报
回复
。。占位学习
机智的呆呆 2011-10-29
  • 打赏
  • 举报
回复
就是递归
c++03规定main函数不能递归调用

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧