C语言中的短路求值介绍

我们在 中提到C语言的短路概念,而仅仅根据左操作数的结果就能知道整个表达式的结果,不再对右操作数进行计算的运算被称为短路求值

为了更直观的表达短路求值的概念,下面让我们看个代码,根据代码计算输出的结果:

#include <stdio.h>

int main()
{
	int i = 0, a = 0, b = 2, c = 3, d = 4;
	i = a++ && ++b && d++;
	printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d);
	printf("i = %d\n", i);
	return 0;
}

上面代码中,i = a++ && ++b && d++;这句在计算机执行时,首先判断a是否为真,我们知道int i = 0, a = 0, b = 2, c = 3, d = 4;这里赋予给a的值为0,C语言中0即为假,而a++的自加操作是先赋值在进行自加操作,它是先计算a = 0,然后才进行自加。
&&是逻辑与的意思,两边都为真,即非零才会为真,此时a的值为0,那么后面的 ++b && d++将不在会运行,直接进入下一步。
代码输出的结果如下显示:
在这里插入图片描述
从上面的结果我们看到,只有a++进行了运算,bd的值并未发生改变,最后i的值为0。
我们把上面代码修改下,把变量a的初始值改为0:

#include <stdio.h>

int main()
{
	int i = 0, a = 1, b = 2, c = 3, d = 4;
	i = a++ && ++b && d++;
	printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d);
	printf("i = %d\n", i);
	return 0;
}

根据第一代码的分析,这里我们把变量a的初始值改为1以后,那么i = a++ && ++b && d++;这句代码运行时先判断a的值,此时a的值为1,非零即为真,继续进行下一句 ++b的判断,此时不论是b还是d的值都是非零,最终,它的输出结果如下:
在这里插入图片描述
对于 || 操作符是怎么样呢?看下面的代码:

#include <stdio.h>

int main()
{
	int i = 0, a = 0, b = 2, c = 3, d = 4;
	i = a++ || ++b || d++;
	printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d);
	printf("i = %d\n", i);
	return 0;
}

|| 逻辑或运算符,是两边操作数有一个为真,那么整个表达式都为真,这段代码中 a的初始值为0,那么尽兴下一段 ++b代码判断,变量 b的初始值为2,但是由于 ++b是先运算后赋值,所以在这里b的值已经发生了变化,被赋值为3,3是非零,表达式返回为真,那么变量i的值此时被赋予1,后面的d++不在运行,直接执行下一行代码。
在这里插入图片描述

关于短路求值就介绍到这里。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值