HM062 交换的两种传法
HM062 交换的两种传法
来源: 第 62 集 指针-指针和函数
难度: 入门
时间限制: 1s
空间限制: 64MB
题目描述
指针可以作为函数的形参。此时要分清两种参数传递:
值传递:形参是普通整数。调用时把实参的值拷贝进去。函数体里用临时变量交换两个形参(temp = a; a = b; b = temp;)只会改形参,**改不了实参**。因此函数内部交换后是新顺序,外面两个变量保持原样。
地址传递:形参是两个指针,调用时传入 &a 和 &b,也就是两个变量的地址。指针里保存的仍是地址。函数体内必须解引用再交换:temp = *p1; *p1 = *p2; *p2 = temp;。这样改的是实参那两块内存,**可以改掉实参**。
不想修改实参就用值传递;想修改实参就用地址传递,按需求选择。
读入若干组询问。每组给定传递方式和两个整数:先调用对应的交换函数,再分别输出函数内部看到的两个数,以及调用结束后外面的两个数。
输入格式
第一行一个整数 \(q\)(\(1 \le q \le 100\))。
接下来 \(q\) 行,每行三个整数 \(op\)、\(a\)、\(b\)(\(op\) 为 \(1\) 或 \(2\),\(-10^9 \le a,b \le 10^9\))。
- \(op=1\):值传递;
- \(op=2\):地址传递。
输出格式
每组输出两行:
- 第一行:
inner以及函数体内交换后的两个整数,相邻之间一个空格; - 第二行:
outer以及调用结束后外面的两个整数,相邻之间一个空格。
每行末尾换行。
样例
输入 #1
2
1 10 20
2 10 20
输出 #1
inner 20 10
outer 10 20
inner 20 10
outer 20 10
输入 #2
1
2 -1 5
输出 #2
inner 5 -1
outer 5 -1
说明
样例 1 第一组是值传递:形参变成 \(20\)、\(10\),实参仍是 \(10\)、\(20\)。第二组是地址传递:传入的是地址,解引用后交换实参内存,内外都是 \(20\)、\(10\)。地址传递的形参应写成 int *pointerA, int *pointerB。
信息
- ID
- 1061
- 难度
- (无)
- 分类
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 通过率
- ?
- 上传者