短路現象1
比如有以下表達式
a && b && c
隻有a為真(非0)才需要判斷b的值;
隻有a和b都為真,才需要判斷c的值。
舉例
求最終a、b、c、d的值。
main()
{
int a,b,c,d;
a = 0;
b = 1;
c = 2;
d = a++ && b++ && --c;
printf("a=%d b=%d c=%d d=%d\n",a,b,c,d);
}
因為a++是先判斷a的值再自加,而a初始值為0, 是以(a++)為假,由短路現象可知&&後面式子b++和--c就都不會執行;
對于指派語句,是先将a的值指派給d,然後再自加,是以d的值為0,a最終為1。
執行結果:
短路現象2
a || b || c
隻要a為真(非0)就不必判斷b和c;
隻有a為假,才需要判斷b的值;
隻有a和b都為假,才有必要判斷c的值。
求最終a、b、c、d的值;
main()
{
int a,b,c,d;
a = 0;
b = 1;
c = 2;
d = a++ || b++ || --c;
printf("a=%d b=%d c=%d d=%d\n",a,b,c,d);
}
因為a++是先判斷a的值再自加,而a初始值為0, 是以(a++)為假,由短路現象可知,還需要繼續判斷 || 後面的表達式b++,b++要先判斷b的值,b為1,是以b++為真,由短路現象可知,後面的式子--c就不在執行;
對于指派語句,不再是将a的值指派給d,而是将b先指派給d然後a和b再自加,是以d的值為1,a最終為1,b最終為2。
更多linux知識,請關注 一口Linux
歡迎關注公衆号:一口Linux