HM090 引用必须初始化且不能改绑

HM090 引用必须初始化且不能改绑

HM090 引用必须初始化且不能改绑

来源: 第 90 集 C++中的引用-引用的注意事项

难度: 入门

时间限制: 1s

空间限制: 64MB

题目描述

引用看起来只是起别名,使用时有两条硬规则:

  1. 引用必须初始化。 不能先写 int &b; 再决定它是谁的别名。编译器会要求引用变量必须有初值。创建时就要写成 int &b = a;
  2. 初始化之后不能改绑。 \(b\) 一旦是 \(a\) 的别名,就不能再变成 \(c\) 的别名。

容易看错的是:写了 b = c; 并不表示「让 \(b\) 改绑到 \(c\)」。这是**赋值**,含义是把 \(c\) 的值写进 \(b\) 当前指向的那块内存。因为 \(b\) 和 \(a\) 是同一块内存,所以 \(a\) 也会变成 \(c\) 的值;\(c\) 自己不变。

本题中原变量为 \(a\),另一个变量为 \(c\),引用必须一开始就绑定到 \(a\)。按操作判断或赋值。

输入格式

第一行两个整数 \(a\)、\(c\)(\(-10^9 \le a,c \le 10^9\))。

第二行一个整数 \(q\)(\(1 \le q \le 100\))。

接下来 \(q\) 行:

  • 0:询问「只声明 int &b; 不初始化」是否合法。
  • 1\ x:执行 b = x(通过别名赋值),再输出 \(a\)、\(b\)、\(c\)。
  • 2:执行 b = c(看起来像改绑,其实是赋值),再输出 \(a\)、\(b\)、\(c\)。
  • 3:不修改,输出 \(a\)、\(b\)、\(c\)。

输出格式

  • 操作 0:一行 illegal
  • 其它操作:一行三个整数 \(a\)、\(b\)、\(c\),相邻之间一个空格。

行末换行。

样例

输入 #1

10 20
3
0
3
2

输出 #1

illegal
10 10 20
20 20 20

输入 #2

10 20
2
1 100
3

输出 #2

100 100 20
100 100 20

说明

样例 1:未初始化的引用不合法;创建 int &b = a 后三者为 \(10\ 10\ 20\);再执行 b = c,\(a\) 和 \(b\) 都变成 \(20\),\(c\) 仍是 \(20\),并没有让 \(b\) 改绑到另一块内存。必须使用引用,不能靠两个独立变量假装同步。

信息

ID
1089
难度
9
分类
(无)
标签
(无)
递交数
1
已通过
1
通过率
100%
上传者