HM057 指针条宽核对

HM057 指针条宽核对

HM057 指针条宽核对

来源: 第 57 集 指针-指针所占内存空间

难度: 入门

时间限制: 1s

空间限制: 64MB

题目描述

指针也是一种数据类型,用它可以创建指针变量。指针变量里保存的不是普通业务数据,而是一块内存的地址(常见写法是十六进制编号)。

创建指针并与变量建立关系,有两种等价写法:

  1. 先定义、再赋值:int *pointerA; pointerA = &valueA;
  2. 定义时直接绑定:int *pointerB = &valueA;

两种写法指向同一变量。解引用 *pointerA*pointerB 得到的值相同;比较两个指针本身,也会发现它们保存了同一地址。

指针本身要占多少字节,取决于操作系统,而**不是**它指向的数据类型:

  • 在 32 位操作系统下,任意类型的指针都占 \(4\) 个字节;
  • 在 64 位操作系统下,任意类型的指针都占 \(8\) 个字节。

因此 int *float *double *char * 在同一套系统下宽度完全相同。查看宽度时,既可以写 sizeof(int *),也可以把已经定义好的指针变量放进 sizeof,两者对同一类型给出相同结论。不要把某个固定数字写死,而要根据输入给出的位数判断。

读入整数 \(a\) 和操作系统位数 \(bits\)。用上述两种写法分别指向 \(a\),输出解引用结果,并判断两指针是否保存同一地址。再按 \(bits\) 给出四种指针类型的宽度。最后读入若干组类型编号,判断这两种指针类型的宽度是否相同。

类型编号:\(1\) 表示 int *,\(2\) 表示 float *,\(3\) 表示 double *,\(4\) 表示 char *

输入格式

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

第二行一个整数 \(bits\),只可能是 \(32\) 或 \(64\)。

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

接下来 \(q\) 行,每行两个整数 \(t_1\)、\(t_2\)(\(1 \le t_1,t_2 \le 4\))。

输出格式

第一行两个整数:两种写法解引用得到的值,中间一个空格。

第二行一个整数:若两种写法指向同一地址则输出 1,否则输出 0

第三行四个整数:该操作系统下 int *float *double *char * 的宽度(字节),相邻之间一个空格。

接下来 \(q\) 行:若 \(t_1\) 与 \(t_2\) 对应指针类型宽度相同,输出 same,否则输出 differ。每行末尾换行。

样例

输入 #1

10
32
3
1 2
3 4
1 1

输出 #1

10 10
1
4 4 4 4
same
same
same

输入 #2

-5
64
1
2 3

输出 #2

-5 -5
1
8 8 8 8
same

说明

样例 1 中 \(a=10\),两种写法都解出 \(10\),且指向同一地址。\(32\) 位下四种指针宽度都是 \(4\)。任意两种指针类型宽度相同,因此三问都是 same。样例 2 是 \(64\) 位,宽度都是 \(8\)。不要输出评测机上 sizeof 的具体数字来充当第三行,必须按 \(bits\) 套用 \(32\to 4\)、\(64\to 8\) 的规则。

信息

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