2012-07-01 3 views
6

Ich bin überrascht, Schnur plus boolean hat ähnliche Wirkung ternären Betrieb pluralize:const Zeichenfolge plus boolean in C

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

Wenn apple <= 1, es Apfel gedruckt wird. Warum funktioniert das?

Antwort

11

Da die Bedingung entweder 0 oder 1 ergibt und die Zeichenfolge "s" genau ein Zeichen vor dem 0-Terminator enthält. So "s" + bool wird auf die Adresse "s" auswerten, wenn bool falsch ist, und zu einem Zeichen dahinter, die Adresse des 0-Terminator wenn wahr.

Es ist ein cooler Hack, aber verwenden Sie Code nie wirklich ernsthaft.

+0

ah, ich sehe ... danke – Oxdeadbeef