今天在网上看到了1987年国际C语言混乱代码大赛获奖的一行代码,代码只有一行,却穷尽了C中的精华。下面对这一行代码进行分析:

main() { printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}

任何复杂的东西源自自己了解的知识太少了,知道必须的一些东西后再复杂的东西也会变得简单。我查找了一个解释,觉得讲的不错,就直接引用了,原文的作者是一个大佬,我很佩服,计算机的前辈。

int main()
{/* unix被编译器内定为一个宏 * 相当于#define unix 1     */printf("unix=%d\n", unix); /* =1 */ /* 打印字符串"un",因为"fun"是个字符数组* "fun"+1相当于字符指针右移,指向"un" */printf("%s\n","fun"+1);/* "have"是个字符数组,"have"[1]即字符a* 输出97,即第二个字符'a'的ASCII值。*/printf("%d\n", "have"[1]);printf("%d\n", 'a');/* 在C语言中,x[1] = 1[x] */printf("%d\n", (1)["have"]);/* 97 - 96 = 0x61 - 0x60 = 1 */printf("%d\n", (1)["have"] - 0x60);/* 所以 "fun"+((1)["have"]-0x60) 相当于"fun"+1,输出"un" */printf("%s\n", "fun" + ((1)["have"] - 0x60));/* 将其中的1用unix代替 */printf("%s\n", (unix)["have"]+"fun"-0x60);/* 以上为后半部分 = "un" *//* 下面两个都输出"bcde", 因为指针都是从'b'开始 */printf("%s\n", "abcde" + 1);printf("%s\n", &"abcde"[1]);/* &"abcde"[1] == &(1)["abcde"]  输出一样 */printf("%s\n", &(1)["abcde"]);/* 1用unix代替 */printf("%s\n", &unix["abcde"]);/* 下面输出"%six" 并换行 */printf("%s", &"?%six\n"[1]);/* 注意:\012 = 0x0a = \n, 第一个字符 \021 被跳过\0 是空字符  *//* 同样输出"%six" 并换行 */printf("%s", &"\021%six\012\0"[1]);/* 相当于这样 */printf("%s", &unix["\021%six\012\0"]);/* 把字符串"%six\n"当作格式,输出"ABix" */printf(&unix["\021%six\012\0"], "AB");/* 相当于这样 */printf("%six\n", "AB");/* 所以下面的可以输出"unix" */printf("%six\n", (unix)["have"]+"fun"-0x60);/* 至此,问题解决!!!输出"unix" */printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);return 0;
}

如果坚持看到了这里,那一行的代码也就变得简单易懂了,写这行代码的作者不愧是贝尔实验室的大佬。

这是计算机前辈的博客的链接,感谢!

C中最复杂难懂的一行代码相关推荐

  1. 在CV/NLP/DL领域中,有哪些修改一行代码或者几行代码提升性能的算法?

    链接:https://www.zhihu.com/question/427088601 编辑:深度学习与计算机视觉 声明:仅做学术分享,侵删 作者:年年的铲屎官 https://www.zhihu.c ...

  2. 简单有效!在CV/NLP/DL领域中,有哪些修改一行代码或者几行代码提升性能的算法?...

    圈圈 1. relu:用极简的方式实现非线性激活,还缓解了梯度消失 x = max(x, 0) 2. normalization:提高网络训练稳定性 x = (x - x.mean()) / x.st ...

  3. Html页面中直接显示pdf【一行代码实现】

    在对应的展示页面添加下面语句: 记得替换pdf文件路径 <embed src="/zhengshu.pdf" style=" width: 540PX; heigh ...

  4. idea中使用git查看每一行代码是谁写的

  5. LeetCode中,python一行代码能干啥?

    导读 都说python语言简洁.集成高效,一行代码往往能实现很多复杂的操作,比如两变量交换.心形输出.打印乘法口诀等等.但这些总归还是不太实用.那么我们换做在LeetCode中,看看用python一行 ...

  6. 25条实用的Python一行代码,你用过哪些?

    自从我用Python编写第一行代码以来,就被它的简单性.出色的可读性和特别流行的一行代码所吸引. 在下面,我将给大家介绍并解释一些非常实用Python一行程序. 可能有些你还不知道,但对你未来的Pyt ...

  7. 【CVPR2020 Oral】只需一行代码就可提升迁移性能

    关注上方"深度学习技术前沿",选择"星标公众号", 精选文章,第一时间送达! 作者:Hassassin 知乎链接:https://zhuanlan.zhihu. ...

  8. CVPR 2020 Oral:一行代码提升迁移性能,中科院计算所研究生一作

    贾浩楠 发自 凹非寺 量子位 报道 | 公众号 QbitAI 在迁移学习任务中,一直存在这样的问题: 目标域由于没有标签,常常导致分界面附近混淆较多的数据. 中科院计算所的在读研究生崔书豪等,提出了一 ...

  9. 一行代码快速搞定Flowable断点下载(中)

    一行代码快速搞定Flowable断点下载(中) 感觉上一篇家常聊了太多,这一篇就直接进入正题,首先来看一下,通过存储化以及方法拓展技术将mComposableDisposable的相关逻辑也从抽象Ac ...

最新文章

  1. 震惊!线上四台机器同一时间全部 OOM,到底发生了什么?
  2. 社交网络图挖掘1--将社交网络看作图及其聚类
  3. C++实现bellman ford贝尔曼-福特算法(最短路径)(附完整源码)
  4. [转载] 《财富》评最受尊敬IT企业:苹果居首IBM次席
  5. HDU 5617 Jam's maze dp+滚动数组
  6. 并发执行linux命令结果混乱,Shell脚本--并发执行
  7. 云服务器与传统服务器的优劣对比_相比于传统服务器,云服务器的优势在哪
  8. h5 Table表格
  9. xmlspy使用必备的技巧
  10. 不是HR,Leader你会面试应聘者吗(如何起好手中的扑克牌)
  11. 自然语言处理领域介绍
  12. 30 行代码实现,支付宝蚂蚁森林自动收能量!
  13. WordPress初学者入门教程-写文章
  14. 【蓝桥】算法训练 Beaver‘s Calculator(贪心)
  15. 快应用JS自定义月相变化效果
  16. 7-3 IP地址转换
  17. 我支持刘翔,理由有三
  18. 【论文笔记】Nonparallel Emotional Speech Conversion Using VAE-GAN 基于VAE-GAN的非平行情感语音生成
  19. 网络课笔记整理——物理层
  20. Java开发入门与实战!张孝祥java就业培训

热门文章

  1. 基于web的HMI / SCADA软件
  2. 树莓派配置无线连接与无线AP热点
  3. 微软雅黑html中怎么写,网页中使用微软雅黑字体(css调用微软雅黑)
  4. Quantifying Success in Science: An Overview2020翻译
  5. java发展前景选兄弟连_兄弟连:Java程序员未来应该如何发展
  6. 协和医院(东单院区)就诊流程记录
  7. 2021年茶艺师(中级)免费试题及茶艺师(中级)模拟考试
  8. mac 安装eclipse mat java内存分析工具
  9. 平塘天眼和大数据有什么关系_聊聊平塘“天眼”的那些事儿,“FAST”到底有多牛?...
  10. 【AIX】LPar分区技术、逻辑CPU、虚拟CPU、物理CPU