6

文字列とブール値が三項演算と同様の効果があることに驚いています。

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

の場合apple <= 1、apple が出力されます。なぜこれが機能するのですか?

4

1 に答える 1

11

条件は 0 または 1 に評価され、文字列"s"には 0 ターミネータの前にちょうど 1 文字が含まれているためです。したがって、false の場合は"s" + boolアドレスに評価され、 true の場合はその 1 文字後ろの 0 ターミネータのアドレスに評価されます。"s"bool

これはクールなハックですが、そのようなコードを本格的に使用しないでください。

于 2012-07-01T00:42:41.887 に答える