写一个函数swap,该函数的功能为完成两个整数的交换;在主函数中从键盘输入两个整数,调用swap函数完成对输入的两个数的交换,并打印交换结果。请分别用传递值,指针和引用三种参数的方式完成C语言代码实现
时间: 2024-09-12 13:11:07 浏览: 123
在C语言中,我们可以使用三种不同的方式来传递参数:值传递、指针传递和引用传递。下面是三种方法的实现:
1. **传递值**(默认情况,实际上是浅拷贝):
```c
#include <stdio.h>
void swap(int a, int b) { // 通过值传递
int temp = a;
a = b;
b = temp;
}
int main() {
int num1, num2;
printf("Enter two numbers to swap: ");
scanf("%d %d", &num1, &num2);
swap(num1, num2); // 参数传递的是值,交换后的改变不会影响原变量
printf("After swapping: num1 = %d, num2 = %d\n", num1, num2);
return 0;
}
```
2. **传递指针**:
```c
#include <stdio.h>
void swap(int* a, int* b) { // 通过指针传递
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int num1, num2;
printf("Enter two numbers to swap: ");
scanf("%d %d", &num1, &num2);
swap(&num1, &num2); // 直接操作地址,改变了原始变量
printf("After swapping: num1 = %d, num2 = %d\n", num1, num2);
return 0;
}
```
3. **传递引用**(C99及以上版本支持):
```c
#include <stdio.h>
#include <stdtypes.h> // 为了使用stdint_t
void swap(int& a, int& b) { // 通过引用传递
int temp = a;
a = b;
b = temp;
}
int main() {
int num1, num2;
printf("Enter two numbers to swap: ");
scanf("%d %d", &num1, &num2);
// C99引入了stdint_t,用于声明无类型的指针
int* ptrs[] = {&num1, &num2};
swap(*ptrs, *(ptrs + 1)); // 间接使用引用来操作
printf("After swapping: num1 = %d, num2 = %d\n", num1, num2);
return 0;
}
```
注意:C语言本身不支持直接引用传递,上述代码中通过指针间接实现了引用的效果。
阅读全文