题目
编写一个带指针参数的函数 swap,实现交换调用者传入的两个整型变量的值。
输入格式:一行输入两个整数 a 和 b,以空格分隔。
输出格式:输出交换后的两个整数,以空格分隔,末尾换行。
数据范围与约定:-109 ≤ a, b ≤ 109。
思路与算法
1. C 语言值传递机制
Java 语言中普通形参是实参的副本,在函数内修改普通形参无法影响外部变量。
2. 指针与地址传递
函数参数声明为指针 int[]x, int[]y,调用时传入变量地址 swap(&a, &b)。通过解引用 *x 即可直接读写外部实参的内存空间。
完整程序
import java.util.Scanner;
public class Main {
// Java 中基本类型是按值传递,通过传入数组模拟指针或引用传递来交换元素
public static void swap(int[] arr, int i, int j) {
int t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
System.out.println("before: " + a + " " + b);
int[] arr = new int[]{a, b};
swap(arr, 0, 1);
System.out.println("after: " + arr[0] + " " + arr[1]);
}
}运行示例
输入:
3 7输出:
before: 3 7
after: 7 3