HM060 三种指针只读
HM060 三种指针只读
来源: 第 60 集 指针-const修饰指针
难度: 入门
时间限制: 1s
空间限制: 64MB
题目描述
const 修饰指针有三种写法,名称按「把英文译成中文、看 const 和 * 谁在前」来记:const 译作「常量」,* 译作「指针」。
- 常量指针
const int *p = &a:const在星号前面,修饰的是指针(更准确说是「指向的值」)。指针的**指向可以改**(p = &b合法),**指向的值不能改**(*p = 20非法)。看const后面紧跟的是*,所以解引用赋值会被拦住。 - 指针常量
int * const p = &a:const在星号后面、紧挨指针名。指针的**指向不能改**(p = &b非法),**指向的值可以改**(*p = 20合法)。看const后面紧跟的是变量本身,所以不能让 \(p\) 改指向。 - 既修饰指针又修饰常量
const int * const p = &a:指向和指向的值都不可改。*p = 20与p = &b都非法。const的作用就是把被限定的对象变成只读。
普通指针没有这些限制。有两个整型变量 \(a\)、\(b\),指针一开始指向 \(a\)。按给定的修饰种类处理若干操作:非法操作必须拒绝,不得真的去改。
输入格式
第一行两个整数 \(a\)、\(b\)(\(-10^9 \le a,b \le 10^9\))。
第二行一个整数 \(kind\)(\(1 \le kind \le 3\)),表示修饰种类:\(1\) 常量指针,\(2\) 指针常量,\(3\) 两者都修饰。
第三行一个整数 \(q\)(\(1 \le q \le 100\))。
接下来 \(q\) 行,每行一个操作:
1 x:尝试执行*p = x(\(x\) 为整数,绝对值不超过 \(10^9\));2:尝试执行p = &b;3:输出当前 \(a\)、\(b\) 以及*p。
输出格式
对每个操作输出一行:
- 操作
1或2合法:输出ok; - 操作
1或2非法:输出denied,并且不要修改任何变量或指针; - 操作
3:输出三个整数 \(a\)、\(b\)、*p,相邻之间一个空格。
每行末尾换行。
样例
输入 #1
10 10
1
3
1 20
2
3
输出 #1
denied
ok
10 10 10
输入 #2
10 20
2
3
1 100
2
3
输出 #2
ok
denied
100 20 100
说明
样例 1 是常量指针:不能改指向的值,所以 *p = 20 被拒绝;可以改指向,p 改去指向 \(b\) 后 *p 仍是 \(10\)。样例 2 是指针常量:*p = 100 把 \(a\) 改成 \(100\),但不能改指向。若 \(kind=3\),操作 1 和 2 都应输出 denied。
信息
- ID
- 1059
- 难度
- (无)
- 分类
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 通过率
- ?
- 上传者