HM061 指针巡阵

HM061 指针巡阵

HM061 指针巡阵

来源: 第 61 集 指针-指针和数组

难度: 入门

时间限制: 1s

空间限制: 64MB

题目描述

数组是一段连续空间中存放的、类型相同的若干数据元素。下标从 \(0\) 开始。用「数组名 + 方括号 + 下标」可以访问元素,例如 arr[0] 就是第一个元素。

数组名本身就是数组的首地址。把整型指针指向这个首地址:int *pointerA = arr; 再解引用 *pointerA,取出的就是第一个元素,结果应与 arr[0] 相同。

整型指针保存的是地址。对它做一次 ++,它会向后偏移一个整型元素的宽度(在常见 32 位模型下是 \(4\) 个字节),于是来到第二个元素的位置,再解引用就能得到第二个元素。

要访问全部元素,可以再准备一个指向首地址的指针 pointerB,用循环重复「先解引用输出当前元素,再让指针 ++ 后移」。不要再用 arr[i] 来冒充这一遍遍历。

读入长度为 \(n\) 的整型数组。先分别用下标和指针输出第一个元素,再让指针后移一次输出第二个元素,然后用新指针完整遍历全数组。最后读入若干个偏移 \(k\),对每个 \(k\) 用「首地址指针 + \(k\)」的方式输出对应元素。

输入格式

第一行一个整数 \(n\)(\(2 \le n \le 100\))。

第二行 \(n\) 个整数 \(a_0,a_1,\ldots,a_{n-1}\),每个整数的绝对值不超过 \(10^9\)。

第三行一个整数 \(q\)(\(1 \le q \le 100\))。

第四行 \(q\) 个整数 \(k_1,k_2,\ldots,k_q\)(\(0 \le k_i < n\)),表示偏移。

输出格式

第一行:用数组名加下标访问的第一个元素。

第二行:用指向首地址的指针解引用得到的第一个元素。

第三行:指针 ++ 一次后再解引用得到的第二个元素。

第四行:用指针遍历得到的全部 \(n\) 个元素,相邻之间一个空格。

接下来 \(q\) 行:每行一个整数,即首地址加上对应偏移后解引用的结果。

每行末尾换行。

样例

输入 #1

10
1 2 3 4 5 6 7 8 9 10
2
0 9

输出 #1

1
1
2
1 2 3 4 5 6 7 8 9 10
1
10

输入 #2

2
7 8
1
1

输出 #2

7
7
8
7 8
8

说明

数组名是首地址。*pointerAarr[0] 都应是第一个元素。整型指针 ++ 后移一个元素,得到第二个元素。第四行必须通过指针移动遍历,不能只写下标循环。偏移 \(k\) 对应 *(base + k),也就是第 \(k+1\) 个元素。

信息

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