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
- 通过率
- ?
- 上传者