题目

编写一个带指针参数的函数 swap,实现交换调用者传入的两个整型变量的值。

输入格式:一行输入两个整数 a 和 b,以空格分隔。

输出格式:输出交换后的两个整数,以空格分隔,末尾换行。

数据范围与约定:-109 ≤ a, b ≤ 109。

思路与算法

1. C 语言值传递机制
C 语言中普通形参是实参的副本,在函数内修改普通形参无法影响外部变量。

2. 指针与地址传递
函数参数声明为指针 int *x, int *y,调用时传入变量地址 swap(&a, &b)。通过解引用 *x 即可直接读写外部实参的内存空间。

完整程序

#include <stdio.h>

// 指针传参:接收外部变量的内存地址,解引用 * 修改实际内存内容
static void swap_int(int *x, int *y)
{
    int t = *x;
    *x = *y;
    *y = t;
}

int main(void)
{
    int a, b;
    if (scanf("%d %d", &a, &b) != 2) {
        return 1;
    }
    printf("before: %d %d\n", a, b);

    // 传入地址 &a 和 &b
    swap_int(&a, &b);
    printf("after: %d %d\n", a, b);
    return 0;
}

运行示例

输入:

3 7

输出:

before: 3 7
after: 7 3