qq1256740918 发表于 2020-4-30 11:00:52

求助!大括号分区域的问题。

#include<stdio.h>

intmain()
{
   inta = 3, b = 2, c = 1;
    c -= ++b;
    b *= a + c;
    {
               intb = 5, c = 12;
                       c /= b * 2;
                a -= c;
                printf("%d, %d, %d, ", a, b, c );
                a += --c;
        }
        printf("%d, %d, %d\n", a, b, c);
}


最后一个输出里的c为什么等于-2?
单纯使用大括号有什么需要注意的吗?

永恒的蓝色梦想 发表于 2020-4-30 11:03:08

一个大括号代表一个作用域
你在大括号里把所有变量都再次声明了一遍,所以说这些变量的修改与外部没有关系
所以c-=++b,即c-=3,也就是-2了

sunrise085 发表于 2020-4-30 11:09:43

大括号划出了一个局部作用域,
在里面定义的b和c不影响外面的b和c,因为里面没有定义a,所以用的还是外面的a
所以a的值在局部作用域可以被改变,外部的b和c的值在局部作用域不会被改变

qq1256740918 发表于 2020-4-30 11:11:22

本帖最后由 qq1256740918 于 2020-4-30 11:13 编辑

永恒的蓝色梦想 发表于 2020-4-30 11:03
一个大括号代表一个作用域
你在大括号里把所有变量都再次声明了一遍,所以说这些变量的修改与外部没有关系 ...

意思是没有在大括号里声明的a,仍会执行大括号里的语句,把a的值带到外部。
而在大括号里声明的bc,并对bc改动,但外部的bc则不会执行大括号里的流程

永恒的蓝色梦想 发表于 2020-4-30 11:12:54

qq1256740918 发表于 2020-4-30 11:11
意思是没有在大括号里声明的a,仍会执行大括号里的语句,把a的值带到外部。

是的,a可以,但是b和c不行
页: [1]
查看完整版本: 求助!大括号分区域的问题。