+ -
当前位置:首页 → 问答吧 → 崩溃了,没看懂这个程序,高手写的

崩溃了,没看懂这个程序,高手写的

时间:2010-08-06

来源:互联网

The shortest such program written in C, known to the present author, is by Vlad Taeerov and Rashit Fakhreyev and is 64 characters in length:

main(a){printf(a,34,a="main(a){printf(a,34,a=%c%s%c,34);}",34);}

作者: ydfgic   发布时间: 2010-08-06

34是亮点。
顺便2分。

作者: donglongchao   发布时间: 2010-08-06

打印自身的程序

作者: hellioncu   发布时间: 2010-08-06

34是ascII "

作者: zhangsuozhu   发布时间: 2010-08-06

打印它自己,34用%c打印就是"

作者: liwangli1983   发布时间: 2010-08-06

俺也没看懂..

main(a){printf(a,34,a="main(a){printf(a,34,a=%c%s%c,34);}",34);}

main(a) a是干啥的啊.
真不知道写这样的程序是要干嘛..

作者: pandaiam   发布时间: 2010-08-06

哥也看不懂

作者: 帅绝人寰   发布时间: 2010-08-06

但疼

作者: prolj   发布时间: 2010-08-06

  1. main(a)
  2. {
  3.     a = "main(a){printf(a,34,a=%c%s%c,34);}";
  4.     printf(a,34,a,34);
  5. }
复制代码
这回你们能看懂了吧。

作者: zhangsuozhu   发布时间: 2010-08-06

  1. main(a)
  2. {
  3.     a = "main(a){printf(a,34,a=%c%s%c,34);}";
  4.     printf("main(a){printf(a,34,a=%c%s%c,34);}", 34, a, 34);
  5. }
复制代码

作者: zhangsuozhu   发布时间: 2010-08-06

我也不知道main()中a是干啥的。。。

作者: runeveryday   发布时间: 2010-08-06

回复 runeveryday


    就是用了一下这个参数做暂时变量.

作者: zhangsuozhu   发布时间: 2010-08-06



QUOTE:
俺也没看懂..

main(a){printf(a,34,a="main(a){printf(a,34,a=%c%s%c,34);}",34);}

main(a) ...
pandaiam 发表于 2010-08-06 15:40




    a是形参啊,就是main(int argc, char **argv)里的argc这里充当自动变量用了.

作者: liwangli1983   发布时间: 2010-08-06

gcc -S生成汇编代码,再手动画一下main栈帧就明白了

作者: liwangli1983   发布时间: 2010-08-06

也是没有看懂

作者: rick.zhao   发布时间: 2010-08-06

我白解释了!没人看回贴啊

作者: zhangsuozhu   发布时间: 2010-08-06



QUOTE:
这回你们能看懂了吧。
zhangsuozhu 发表于 2010-08-06 15:46




    还是没看懂...

a是啥类型的东西?他写好不行吗...
printf(a, 34, a, 34);

这个还真不知道还能这样用,应该是自己printf学的不好吧.

作者: pandaiam   发布时间: 2010-08-06

回复 pandaiam


   

QUOTE:
    printf("main(a){printf(a,34,a=%c%s%c,34);}", 34, a, 34);

作者: zhangsuozhu   发布时间: 2010-08-06

本帖最后由 liwangli1983 于 2010-08-06 16:43 编辑


QUOTE:
还是没看懂...

a是啥类型的东西?他写好不行吗...
printf(a, 34, a, 34);

这个还真不知道还 ...
pandaiam 发表于 2010-08-06 16:31



a是int,main函数的原形不是main(int, char **)么,虽然我们一般写成main(int argc, char **argv).但实际上形参的名字是不重要的.所以写成main(a)也可以.理论上应该是main(int a)但老式的C写法可以不指定形参类型,默认为int.

a=字符串的作用是把字符串常量的地址赋值给a,因为a是int类型的,所以这中间有个类型转换.然后a中存的就是字符串的地址了,可以a当成一个指向字符串的指针用了.

printf(a, 34, a, 34);这里第一个a起格式化字符串的作用(printf函数原形int printf(const char *format, ...);所以第一个a对应的一定是格式化字符串format),注意到字符串里有"%c%s%c",两个%c分别对应两个34,打出来就是符号"双引号.中间那个%s对应第二个a

作者: liwangli1983   发布时间: 2010-08-06

我刚开始不理解, 后来看这个函数 打印结果 是b,  有些明白了。

main 中的参数,缺省的应该认为是 int 类型的。
而 printf  中的 几句, 是由由向左执行的。
就是先执行   a="b",
再执行 printf

main(a)
{
  printf(a,34,a="b",34);
}

作者: goldenfort   发布时间: 2010-08-06



QUOTE:
回复  pandaiam
zhangsuozhu 发表于 2010-08-06 16:33




    这回看懂了.

作者: pandaiam   发布时间: 2010-08-06

a=字符串的作用是把字符串常量的地址赋值给a,因为a是int类型的,所以这中间有个类型转换.然后a中存的就是字符串的地址了,可以a当成一个指向字符串的指针用了.


竟然还可以这样.

作者: pandaiam   发布时间: 2010-08-06

相关阅读 更多

热门下载

更多