C语言中的短路现象

C语言短路现象讲解

- 短路现象 1

表达式1 && 表达式2 && 表达式3;

分析:

只有当表达式1为真(非0)时才需要判断表达式2的值;只有表达式1和2都为真(非零)时;才需要判断表达式3的值。当表达式1为假(0),则发生短路,不执行表达式2和3,整个表达式值为0!

例如:

#include"stdio.h"
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=1 b=1 c=2 d=0

- 短路现象 2

表达式1 || 表达式2 || 表达式3;

分析:

只有表达式1为假(0)时才需要判断表达式2的值;只有表达式1和2都为假(0)时,才需要判断表达式3的值。当表达式1为真(非0),则发生短路,不执行表达式2和3,整个表达式值为1!

例如:

#include"stdio.h"
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=1 b=2 c=2 d=1

很多初学者会不明白上面例题中,单目运算符"++“的优先级要高于双目运算符,为什么程序却不会先执行”++"呢?其实这个就是表达式的计算顺序和运算符优先级的区别,在这里我来给大家讲解一下其中的问题~

运算符的优先级:只是规定操作数的结合方式,但并未说明操作数的计算顺序。

例如:a+b+c;
运算符的优先级只能限制该运算符两端的操作对象,优先级高的可以先选择它的操作数,本题中"+“为双目运算符,结合方向自左向右依次结合,所以第一个”+"优先决定它的操作数,所以该表达式等价于(a+b)+c,并不等价于a+(b+c)

操作数的计算顺序:表达式的计算顺序是未知的,是由代码决定的。在C语言中只有4个运算符被规定了操作数的计算次序:&&,||,逗号运算符(,),条件运算符( ? : )

例如:a&&b&&c;
与运算符的计算顺序自左向右依次判断,但注意 当表达式a为假(0),则发生短路,不执行表达式b和c,整个表达式值为0

综上所述:优先级的高低只能限制运算符的操作对象,但是表达式的计算顺序仍然取决于代码本身。

你可能感兴趣的:(C语言散装知识点,c语言,编程语言)