printf(&unix["\021C%set"],(unix)["Chb"]+"Trick"-0X67);
它给出的输出为“cricket”。但我不明白为什么?http://ideone.com/fteahg
UNIX
是一个预定义的宏,指示它是一个类似UNIX的系统。
在C语言中,index[array]
与array[index]
相同。正如MSDN所解释的:
通常,postfix-expression表示的值是一个指针值,如数组标识符,而expression是一个整数值(包括枚举类型)。然而,在语法上所需要的只是其中一个表达式是指针类型的,而另一个是整型的。因此,整数值可以在表达式后缀位置,指针值可以在表达式或下标位置的括号中。
printf(&unix["\021C%set"],(unix)["Chb"]+"Trick"-0X67);
转换为
printf(&"(\021C%set"[1]),"Chb"[1]+"Trick"-0X67);
&(“\021C%set”[1])
取“\021C%set”第一个元素的地址,相当于取“C%set”的地址(由于C指针算术)。简化它,并重新排列一些操作数:
printf("C%set","Trick"+"Chb"[1]-0X67);
“chb”[1]
是'h'
,它是ASCII值0x68,因此“chb”[1]-0x67
是1,而“trick”+1
是“rick”
(由于C指针算术)。因此代码进一步简化为
printf("C%set","rick");
上面印着“蟋蟀”
为什么 -1 是 true
表达式--a^b^c^d。 什么将是它的后缀表达式。 如果遇到具有从右到左关联性的运算符,我们该怎么办?我们是将其推入堆栈还是将其弹出?
我不明白为什么< code>gcc -S -m32会产生这些特定的代码行: C 代码: 它给出以下输出:
当我跑的时候 我在Java中得到错误。为什么?这相当于false==false,这是真的。这不是Java特有的,我在其他语言中也得到了相同的结果。这是因为短路评估吗?似乎左右双方仍会/应该进行比较。
问题内容: 以下代码是众所周知的将重音符转换为纯文本的代码: 我用这种方法代替了“手工制作”方法,但是我需要了解replaceAll的“ regex”部分 1)什么是“ InCombiningDiacriticalMarks”? 2)它的文档在哪里?(和类似的?) 谢谢。 问题答案: 是Unicode块属性。在JDK7中,您将可以使用两部分表示法来编写它,这对于读者来说可能更清楚。它在UAX#44
本文向大家介绍python 什么是lambda表达式?它有什么好处?相关面试题,主要包含被问及python 什么是lambda表达式?它有什么好处?时的应答技巧和注意事项,需要的朋友参考一下 简单来说,lambda表达式通常是当你需要使用一个函数,但是又不想费脑命名一个函数的时候使用,也就是通常所说的匿名函数