HM062 交换的两种传法

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