HM090 引用必须初始化且不能改绑
HM090 引用必须初始化且不能改绑
来源: 第 90 集 C++中的引用-引用的注意事项
难度: 入门
时间限制: 1s
空间限制: 64MB
题目描述
引用看起来只是起别名,使用时有两条硬规则:
- 引用必须初始化。 不能先写
int &b;再决定它是谁的别名。编译器会要求引用变量必须有初值。创建时就要写成int &b = a;。 - 初始化之后不能改绑。 \(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%
- 上传者