HM056 指针间接改数

HM056 指针间接改数

HM056 指针间接改数

来源: 第 56 集 指针-指针的定义和使用

难度: 入门

时间限制: 1s

空间限制: 64MB

题目描述

内存里每一块空间都有地址编号,编号从 \(0\) 起算,通常用十六进制表示。指针的用途是记录这个地址编号,从而间接访问那块内存。一句话:指针就是一个地址。

普通变量(例如 int valueA = 10;)会在内存中占一块空间并放入数据。既可以用变量名直接操纵这块空间,也可以在知道地址编号后,通过指针拿到同一份数据。指针变量里保存的,正是另一个变量的地址。

定义指针的语法是:数据类型、星号、指针变量名。指向整型数据时,应定义同类型的整型指针,例如 int *pointerA;。名字习惯写成带 p 的形式(point 的首字母),但并不是只能用这个字母。

仅仅创建指针变量,还没有和目标数据建立关系。要用取地址符 & 取出变量的地址,再让指针记录它:pointerA = &valueA;。此时指针里保存的编号就是该变量的地址,因此指针本身与 &valueA 表示同一处。不要输出真实地址(不同机器上的十六进制编号会变)。

使用指针靠解引用:在指针前面加星号,写作 *pointerA,表示找到指针指向的那块内存中的数据。既可以读取(*pointerA 就是原来的值),也可以写入(*pointerA = 1000; 会把那块内存改掉)。写入之后,用变量名读到的值和用 *pointerA 读到的值相同,因为它们是同一块内存。

读入整数 \(a\) 和新值 \(x\)。定义整型指针并指向 \(a\),先读取、再判断指针是否保存了 \(a\) 的地址,最后通过解引用把内存改成 \(x\)。

输入格式

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

第二行一个整数 \(x\)(\(-10^9 \le x \le 10^9\)),表示要通过指针写入的新值。

输出格式

第一行:解引用读到的值(应等于原来的 \(a\))。

第二行:若指针保存的正是 \(a\) 的地址则输出 1,否则输出 0

第三行:写入新值后,用变量名读到的值和用解引用读到的值,中间一个空格(两者都应等于 \(x\))。

每行末尾换行。

样例

输入 #1

10
1000

输出 #1

10
1
1000 1000

输入 #2

-7
0

输出 #2

-7
1
0 0

说明

定义写成 int *pointerA;,再用 pointerA = &valueA; 建立关系。& 取地址,* 解引用。样例 1 先读出 \(10\),确认指针记录的就是该变量地址,再把内存改成 \(1000\),变量本身与解引用结果都变成 \(1000\)。禁止输出指针的十六进制地址。

信息

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