# 【选择测试】变量的作用域
## Part1
在之前的课程内容中,我们学习了变量的概念,接下来我们将对变量可以被使用的范围 —— 作用域进行了解释。我们说,我们可以简单的理解一个变量的 **作用域(scope)** 一般可以被界定为变量声明语句之后、包裹了它的声明语句的最内一层 `{}` 之内。例如下图中,对于变量 `alpha`,图中的绿色标记了包裹了它的声明语句的最内一层 `{}` 所在的区域;而黄色的箭头标记出了自它声明后,它的实际作用域范围(也就是作用域)。
这里我们只做一个简单的介绍——对于 C++ 的 **命名空间**,在后续课程中我们会进一步地展开讨论。
[![作用域](https://res.jisuanke.com/img/upload/9fe424620308e1c185c19fcb10710041ececaf43.png)](https://res.jisuanke.com/img/upload/9fe424620308e1c185c19fcb10710041ececaf43.png)
读一下下面这个 C++ 语言程序,选出关于这个程序描述的所有正确选项(请注意,如果输出格式的引号中有 `\n`,程序输出的位置将换行)。
~~~
#include <iostream>
using std::cout;
using std::endl;
int main() {
int year;
year = 2011;
{
int month;
month = 5;
cout<<year<<" 年 "<<month<<" 月"<<endl;
year = 2016;
}
int month;
month = 3;
cout<<year<<" 年 "<<month<<" 月"<<endl;
return 0;
}
~~~
A. 输出第一行是 `2011 年 5 月`
> 第一个变量 `year` 的在声明后,在第 6 行被赋值为 `2011`。第一次输出时它的值是 `2011`。这里输出的 `month` 来自第 8 行的声明,它的值则是在第 9 行的赋值中获得。
B. 这个程序将会出错,因为 `month` 这个变量被声明了两次。
> 这个给出的程序中第一个 `month` 变量并不会在第 12 行的右大括号后产生任何作用。所以之后声明的第二个 `month` 变量并不会与前一个 `month` 冲突。
C. 输出第二行是 `2016 年 3 月`
> 第一个变量 `year` 的在声明后,在第 6 行被赋值为 `2011`,第 11 行被再次赋值成了 2016(请注意这里 `year` 的赋值依然是发生在 year 作用域内的)。这里输出的 `month` 来自第 13 行的声明,它的值则是在第 14 行的赋值中获得,和第 9 行声明的 `month` 完全无关。
D. 如果去掉第 7 行的左大括号和第 12 行的右大括号,这个程序将会出错。
> 如果去掉了这一对大括号,程序中第二个 `month` 变量的声明发生在程序中第一个 `month` 变量的作用域内,这就会违背我们已经学过的“作用域内的多个变量不可使用相同的变量名”的要求了。在程序编译时将会报错。
E. 第二处输出使用的变量 `month` 来自于第 8 行的声明,它的值在第 14 行的赋值中获得。
> 第二处输出使用的变量 `month` 来自第 13 行的声明;第 9 行声明的 `month` 的作用域已经在第 12 行终结。
正确答案:ACD
- 教材介绍
- 《编程初学入门常识》
- 什么是程序语言
- 【知识精讲】编程与编程语言
- 【选择测试】编程语言分类
- 【知识精讲】高级语言分类
- 【选择测试】编译与解释
- 【选择测试】程序员笑话-Java
- 熟悉键盘上用于编程的键位
- 【知识精讲】认识你的键盘
- 【知识精讲】中文和英文字符
- 【匹配测试】识别中英文符号
- 【选择测试】中英文符号的影响
- 【伴随编程】不要使用中文引号
- 【伴随编程】不要使用中文分号
- 【伴随编程】正确地输入符号
- 【选择测试】找出程序中的错误
- 初始工程师思维
- 【知识精讲】二进制思想
- 【选择测试】程序员笑话-凑整
- 【知识精讲】闭合的逻辑
- 【选择测试】程序员笑话-条件
- 程序员职业与生活
- 【知识精讲】程序员的发展方向
- 【知识精讲】程序员的装备
- 【知识精讲】程序员的健康
- 【选择测试】做一名健康的程序员
- 《C++程序设计》
- 前言
- 【知识精讲】编程与计算机科学
- 【知识精讲】编程与软件工程
- 【知识精讲】如何学习编程
- 你好C++
- 【知识精讲】你好,C++
- 【知识精讲】C++程序是如何开发的
- 【知识精讲】成为一名Power User
- 【伴随编程】让我们一起说你好
- 【知识精讲】你的第一个C++语言程序
- 【伴随命令】编译、运行你的程序
- 【伴随编程】将变量流式输出
- 【选择测试】变量的作用域
- 【知识精讲】变量与数据类型
- 【匹配测试】C++语言的入门概念
- 【知识精讲】在程序中学会换行
- 【选择测试】正确地换行
- 简单数学运算
- 【知识精讲】重新认识基本运算
- 【选择测试】运算符的理解
- 【伴随编程】做一下简单的运算
- 【伴随编程】a 的 n 次方
- 【知识精讲】数学函数
- 【伴随编程】让C++语言变成计算器
- 【伴随编程】计算球的体积
- 【匹配测试】数学世界知多少
- 【知识精讲】在程序中添加注释
- 【选择测试】正确地写注释
- 从伴随输入到变量地址
- 【伴随编程】 一个数字复读机器
- 【选择测试】理解标准输入输出
- 【伴随编程】一个加法计算器
- 【程序设计】A+B+C问题
- 【伴随编程】简单的I/O格式控制
- 【知识精讲】地址与取地址符
- 【伴随编程】看看我们的地址
- 习题一:面积与周长
- 【程序设计】矩形面积与周长
- 【程序设计】三角形面积与周长
- 【程序设计】圆形面积与周长
- 程序中的是与非
- 【知识精讲】是非的表示与关系运算
- 【伴随编程】验一验关系运算式
- 【选择测试】关系运算式求值
- 【知识精讲】如果的意义
- 【伴随编程】分段函数求值
- 【知识精讲】如果之后的如果
- 【伴随编程】五则运算器
- 【选择测试】分支的嵌套
- 【伴随编程】问号表达式
- 【知识精讲】是非之间的逻辑组合
- 【伴随编程】判断闰年
- 【程序设计】日期合法性
- 【知识精讲】多路顺序结构
- 【知识精讲】在程序中学会缩进
- 【选择测试】正确的缩进
- C++程序中的苦力
- 【知识精讲】使用循环结构
- 【选择测试】对比两种循环
- 【伴随编程】使用while循环
- 【填空测试】理解循环结构
- 【知识精讲】自减和自增运算符
- 【伴随编程】使用自增运算符
- 【知识精讲】for循环
- 【选择测试】for循环的使用
- 【程序设计】一大波好玩儿的程序
- 《代码能力快速提升》
- 《基础数据结构》
- 《搜索入门》
- 《动态规划基础》
- 《数论和基础数学》
- 《图和数基础》