HM057 指针条宽核对
HM057 指针条宽核对
来源: 第 57 集 指针-指针所占内存空间
难度: 入门
时间限制: 1s
空间限制: 64MB
题目描述
指针也是一种数据类型,用它可以创建指针变量。指针变量里保存的不是普通业务数据,而是一块内存的地址(常见写法是十六进制编号)。
创建指针并与变量建立关系,有两种等价写法:
- 先定义、再赋值:
int *pointerA; pointerA = &valueA; - 定义时直接绑定:
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
- 通过率
- ?
- 上传者