这个好像并不会出现不同的运行结果吧?
这图中的两段程序,运行的结果是一样的。(虽然因为执行运算的先后次序不同,有时会导致程序运行结果的不同)
左边:
因为p的值为1,所以(p||f())的值已经确定为1,所以f()函数就不再调用,于是就执行if下一行的那个输出语句,输出为:True!
右边:
因为先调用f(),它的返回值为0,所以还要继续执行判别p的值。因为p的值为1,所以(p||f())的值也确定为1,最后运行的结果仍是输出:True!
p跟f()其中一个为true就满足条件,C语言中,0为false,非0为true
p||f()是先判断p再判断f(),p=1所以为true,再判断f(),p的值变为0,再返回0,为false,true||false的结果是true
f()||p是先判断f()再判断p,f()执行后,p的值变为0,返回0,为false,此时p的值为0,也为false,最后结果是false,false||false的结果为false
这判断的就是个优先级关系,||两边的语句是从左到右执行的