HM060 三种指针只读

HM060 三种指针只读

HM060 三种指针只读

来源: 第 60 集 指针-const修饰指针

难度: 入门

时间限制: 1s

空间限制: 64MB

题目描述

const 修饰指针有三种写法,名称按「把英文译成中文、看 const* 谁在前」来记:const 译作「常量」,* 译作「指针」。

  1. 常量指针 const int *p = &aconst 在星号前面,修饰的是指针(更准确说是「指向的值」)。指针的**指向可以改**(p = &b 合法),**指向的值不能改**(*p = 20 非法)。看 const 后面紧跟的是 *,所以解引用赋值会被拦住。
  2. 指针常量 int * const p = &aconst 在星号后面、紧挨指针名。指针的**指向不能改**(p = &b 非法),**指向的值可以改**(*p = 20 合法)。看 const 后面紧跟的是变量本身,所以不能让 \(p\) 改指向。
  3. 既修饰指针又修饰常量 const int * const p = &a:指向和指向的值都不可改。*p = 20p = &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

输出格式

对每个操作输出一行:

  • 操作 12 合法:输出 ok
  • 操作 12 非法:输出 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\),操作 12 都应输出 denied

信息

ID
1059
难度
(无)
分类
(无)
标签
(无)
递交数
0
已通过
0
通过率
?
上传者