天天看點

C語言中的短路現象

短路現象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

繼續閱讀