b是多少?为什么?求解答蟹谢

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;
}

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7457063
  • 这篇博客也不错, 你可以看下有两个整型变量a和b,要求把它们的值互换(使用指针变量)
  • 除此之外, 这篇博客: C语言 一维数组详解中的 问题1:那么b的类型是什么呢?它所表示的又是什么? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 一个合乎逻辑的答案是它表示整个数组,但事实并非如此

    在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; 

由于满足第一个条件 !afalse,因此程序将跳过 if 代码块。进入 else if 语句,在检查条件 a == 0 时,发现它不成立。因此,程序将继续跳过嵌套的 If 语句(即 if(a)if(a),因为该条件也是不成立的),并直接跳过整个 else if 语句块。因此,该程序不会对 b 做任何修改,因而 b 的值仍然保留为初始值0。

因此最终得到的 b 值为 0