2012-07-01 19 views
6

yılında sürpriz dize çoğul artı boolean üçlü operasyonun benzer etkiye sahiptir:const dize artı boolean Ben C

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

apple <= 1 ise, elma yazdırılır. Bu neden çalışıyor?

cevap

11

Durum 0 ya da 1 olarak değerlendirildiğinden ve "s" dizesi 0 sonlandırıcıdan önce tam olarak bir karakter içeriyor. Bu nedenle "s" + bool, bool yanlışsa "s" adresinin adresini değerlendirecek ve bunun arkasında bir karakter, eğer doğruysa, 0 sonlandırıcı adresi.

Bu harika bir bilgisayar korsanlığıdır, ancak hiç bir zaman böyle kod kullanmayın.

+0

ah, anlıyorum ... teşekkürler – Oxdeadbeef