juliusun.com
第 17/50 节 冥河C语言教程
C语言很多语句需要判断表达式值真假,如if判断语句、选择运算符? :、while或是for等循环语句等都需要计算判断表达式值真假,然后对程序执行产生影响。
事实上C语言中,任何表达式的结果都是数字,判断及循环中,数字0值为假,非0值全部为真。
比较运算符==、!=,关系运算符<、<=、>、>=,逻辑运算符&&、||,等等,表达式成立时返回1,不成立时返回0。
虽然上述运算符成立时返回1,但是并不是只有数字1代表真,非0全部代表真,如2、3、1000也代表真。但是运算符不能返回多个数,就返回1作为真。
例:
判断语句、循环语句等判断真假时,以非0为真,0为假。如:
既然0为假,非0为真,那么条件"表达式!=0"或"0!=表达式"可以直接写成"表达式",两者的意义都是表达式结果不为0。如:
简洁起见,以后的代码,"表达式!=0"或"0!=表达式"本教程尽量直接写成"表达式",如if(i !=0)尽量写成if(i)。写法更加简洁,同时更提醒学习者,真假本质也是数字。
比较运算符如!=或==使用时,尽量把常量写在前面,变量写在后面。如if(i == 0)尽量写成if(0 == i)。因为多数初学者经常把==写成=,==是比较运算符,=是赋值运算符。当把常量写在前面如if(0 == i)时,当把==写成=时,编译器会报错,提醒学习者。如if(0 == i)写成if(0=i)地出错,原因是0是常量,不能再赋值。而if(i = 0)不会报错,是正确的语法。为什么可以在判断语句里写赋值语句,下一段详细讲。
任何运算符都有返回值,赋值运算符=也是。赋值运算符在将变量赋值后,返回值为赋给变量的值,如i = 9的返回值就是9,i=3+2返回值为5。所以if(i = 0)相当于if(0),是正确的C语言语法。
逻辑运算符&&、||需要说明的是,当表达式某一项已经决定了逻辑表达式值时,逻辑运算符将停止执行以后的表达式。如0 && (3>2),当0已经为假,&&两边有一方为假,整个表达式值即为假,已经没有必要计算3>2了。因此像if(0 && (i = 8))此类表达式执行时,0已经是假了,那么i=8赋值语句就不会执行了,从而可能导致变量i没有执行赋值成功,这方面初学者一定要注意。
同样,||当左边的表达式为真时,右边的表达式已经不会影响逻辑表达式结果了,右边的表达式同样不会执行。如1 || i=0,1为真,则整个表示式为真,i=0赋值语句不会执行。
例:
再介绍一个运算符,逗号运算符‘,’,逗号运算符用法是:多个表达式用逗号隔开,运行时表达式从左到右执行,最后整个表达式返回最右边表达式的值。如表达式:
执行过程是先执行a=1,将a赋值为1,b=2将,b赋值为2,执行到c=b+1时b=2已经执行完毕了,b值为2,所以c=b+1为3,然后整个表达式返回3赋值给变量i。本例将逗号运算符加上括号,是因为逗号运算符优先级低,如果不加括号相当于(i=(a=1)),b-2,c=b+1,此时i值为a=1的结果,不是我们需要的值。
逗号运算符用于函数参数时一定要加上括号。因为函数参数也是用逗号分隔,如果逗号运算符不加括号,会引起歧义,导致编译错误。