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