题目

编写一个带指针参数的函数 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