1987年C语言乱码大赛之最优秀单行代码

阅读: 评论:0

1987年C语言乱码大赛之最优秀单行代码

1987年C语言乱码大赛之最优秀单行代码

转自:.html


看这行代码:
printf(&unix["21%six12"], (unix)["have"] + "fun" - 0x60);看下面解释:
首先看一段代码:代码:
#includeint main()
{int a[5]={1,2,3,4,5};printf("%dn",3[a]);return 0;
}在C语言中 其实数组的引用可以 3[a]这样的形式的. 等价于a[3];
再看下面一段代码:代码:
#includeint main()
{int a[5]={1,2,3,4,5},i=4;printf("%dn",3[a]);printf("%dn",i[a]);return 0;
}这样的表示也是可以的 实际上相当与 i[a]实际上相当于a[4]了再看下面一段代码:代码:
#includeint main()
{printf("%dn",unix);return 0;
}为什么我没有定义unix也能打印出来呢? 原因是unix 被编译器内定为一个 宏.
相当于#define unix 1 这样打印出来1下面来解释一下这个问题.代码:
#includeint main()
{printf("%cn",(unix)["have"]);return 0;
}这里的unix相当于1 那么 unix["have"]相当于 "have"[1] 我们都知道"have"是个字符数组. 那么 "have"[1]就相当于引用这个"have"数组下标为1的字符了 实际上就是a;代码:
#includeint main()
{printf("0x%x",'a');return 0;
}a的asc码的16进制表示为0x61.
(unix)["have"]+"fun"-0x60
中就相当于0x61-0x60+"fun"相当于 0x01+"fun" 相当于字符指针后移相当于"un"了
这样后面的部分解释完了。~

本文发布于:2024-02-03 03:18:41,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170690152148318.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:乱码   之最   大赛   语言   优秀
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23