2012-07-01 54 views
6

以複數我很驚訝串加上布爾具有三元操作類似的效果:常量字符串以及布爾在C

int apple = 2;                  
printf("apple%s\n", "s" + (apple <= 1)); 

如果apple <= 1,它將打印蘋果。爲什麼這個工作?

回答

11

因爲條件的計算結果爲0或1,並且字符串"s"只包含0結束符之前的一個字符。因此如果bool爲假,則"s" + bool將評估爲"s"的地址,並且對於其後的一個字符,如果結果爲0,則終止地址。

這是一個很酷的黑客攻擊,但是千萬不要認真使用這樣的代碼。

+0

啊,我看...謝謝 – Oxdeadbeef