【问题标题】:Variable declaration inside curly braces花括号内的变量声明
【发布时间】:2018-10-29 15:25:50
【问题描述】:

为什么下面的代码会产生错误?我不明白为什么花括号会有所作为。

#include<stdio.h>

int main(void)
{
    {
        int a=3;
    }

    {
        printf("%d", a); 
    }

    return 0;
}

【问题讨论】:

  • 了解 C 中变量的作用域。
  • 据我所知,当涉及多个函数时,变量的范围是一个概念,先生。但在这里我只有一个功能,即 main()
  • Scopes 与 blocks 相关,花括号引入了一个新的 block。
  • 这是否意味着声明 a , 应该在块外而在块内应该只有 a=3 ?
  • @DebmalyaPanday 可能是的,这取决于你想做什么。

标签: c variable-declaration curly-braces printf-debugging


【解决方案1】:

局部变量的范围仅限于 {} 之间的块。

换句话说:在包含int a=3;a的块之外是不可见的。

#include<stdio.h>
int main()
{
    {
      int a=3;
      // a is visible here
      printf("1: %d", a);  
    }

    // here a is not visible
    printf("2: %d", a);  

    {
     // here a is not visible either
      printf("3: %d", a); 
    }

    return 0;
}

提示:google c 范围变量

【讨论】:

  • @DebmalyaPanday 您应该通过单击答案分数下方的“勾号”来接受解决了您的问题的答案。
  • 这可以更好地表述。 “……在街区之外……没有a”不是真的。首先,我们应该准确:变量是一个对象(一个存储区域)和一个标识符(它的名称)。在块内声明的标识符具有块范围。标识符在块外是不可见的,但是当执行在块外时,对象可能存在,就像调用子程序时一样,所以执行会转到其他地方,但块还没有完成执行。一个基本问题没有必要解释所有细节,但所写的陈述应该是正确的。
猜你喜欢
  • 1970-01-01
  • 2019-02-16
  • 2019-06-10
  • 2016-12-10
  • 1970-01-01
  • 1970-01-01
  • 2012-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多