(1)
#include <stdio.h>
int k = 0;
int f()
{
return k++;
}
int main()
{
if( f() && f() )
{
printf("%d\n",k);
}
printf("%d\n",k);
return 0;
}
结果:1
分析:“&&”要求两个条件必须同时为真,即短路原则,因为最开始给k赋值为0,即为假,所以不会执行if语句,然后执行printf语句此时k+1变为了1.
(PS:1.k ++是先赋值再加;++k是先加后赋值。
2.“&&”是与的意思,即为一假则假;“//”是或的意思,即为一真则真。
3.“1”代表真,0代表假。)
(2)想想把k++改成++k呢
int k = 0;
如果是printf("%d",k++); //打印0
如果是printf("%d",++k); //打印1
++k 理解为先进行k=k+1的操作,操作结束后使用新的k值进行运算
k++ 则是先使用k的值进行运算,运算结束后进行k=k+1的操作
结果:2 2
分析:判断第一个if()成了k=1,判断第二个if()k=2,if为真输出k=2,再执行一次输出k=2。++k是先进行加再执行
(3)想想把&&改成||呢
结果:2 2
“||”只要其中一个成立就可以,判断第一个if语句时k变为了1,此时仍继续执行,到达第二个if语句时k变为2