|
发表于 2008-1-20 03:55:07
|
显示全部楼层
Post by asert;1808574
printf(&unix["\021%six\012\0"],(unix)["have"] + "fun" - 0x60);
出自C专家编程里的,输出为unix,高人解释一下
在unix/linux平台上,unix被预定义为1.
其实这里只使用了一个技巧,就是a == i[a]
现在一句句地解释:
&unix["\021%six\012\0"]
=>
&"\021%six\012\0"[unix]
=>
char *p = "\021%six\012\0";
char p2 = &p[1];<=>char *p2 = p+1;
=>
"%six\012\0"
同理:
(unix)["have"] + "fun" - 0x60
=>
"have"[unix] => "have"[1] =>'a' =0x61
(unix)["have"] - 0x60 => 1
"fun" + 1 => "un"
所以,上面改写之后,就是:
printf("%six\n\0", "un");
其实,照我看"\0"是不需要的。 |
|