int a=1,b=0;
if(!a)b++;
elseif(a==0)
if(a)b+=2;
else b+=3;
代码整理一下:
if(!a)
{
b++;
}
else if(a==0)
{
if(a)
b+=2;
else
b+=3;
}
a=1,b=0
所以if(!a)不成立,else if(a==0)也不成立,实际啥也没执行。b还是0
b是0,因为a不等于0,所以第一个条件不成立,进入第二个条件。因为a不等于0,所以第二个条件也不成立。最后b的值仍然是0。
if(!a) 不满足执行 elseif(a==0)不满足,直接执行完了,b的值没改变还是0,加上大括号就明显了
int a=1,b=0;
if(!a){
b++;
}else if(a==0){
if(a)b+=2;
else b+=3;
}
一个合乎逻辑的答案是它表示整个数组,但事实并非如此。
在C中,在几乎所有数组名的表达式中,数组名的值是一个指针常量,也就是数组第一个元素的地址。它的类型取决于数组元素的类型:如果他们是int类型,那么数组名的类型就是“指向int的常量指针”;如果它们是其他类型,那么数组名的类型也就是“指向其他类型的常量指针”。
无论编译器是什么语言,得到的 b
值都是 0
。
首先,声明了两个变量 int a=1, b=0;
,其中 a
被初始化为 1,b
被初始化为 0。
接下来执行 if 语句:
if(!a) // 因为a = 1,所以!a为false,条件不成立
b++;
else if(a == 0) // 条件不成立,也不会执行这个代码块
if(a)
b += 2;
else
b += 3;
由于满足第一个条件 !a
为 false
,因此程序将跳过 if 代码块。进入 else if 语句,在检查条件 a == 0
时,发现它不成立。因此,程序将继续跳过嵌套的 If 语句(即 if(a)
和 if(a)
,因为该条件也是不成立的),并直接跳过整个 else if 语句块。因此,该程序不会对 b
做任何修改,因而 b
的值仍然保留为初始值0。
因此最终得到的 b
值为 0
。