编写程序,定义一个函数void swap(int* p1,int* p2),该函数能实现两个变量的数值交换。主函数中定义两个整型变量,a,b,从键盘获取任意整型值给a,b,并在屏幕上打印其值,然后调用void swap(int* p1,int* p2)函数,实现a,b的值交换,用c语言编写
时间: 2024-03-26 13:41:36 浏览: 23
好的,以下是代码实现:
```
#include <stdio.h>
void swap(int* p1, int* p2) {
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}
int main() {
int a, b;
printf("请输入两个整数:\n");
scanf("%d%d", &a, &b);
printf("交换前:a = %d, b = %d\n", a, b);
swap(&a, &b);
printf("交换后:a = %d, b = %d\n", a, b);
return 0;
}
```
在主函数中,我们先定义了两个整型变量a和b,并使用scanf从键盘获取任意整型值赋给它们。然后打印出a和b的值,调用swap函数将a和b的值进行交换,最后再次打印出a和b的值,验证交换是否成功。
swap函数中,我们定义一个temp变量,用于存储p1指向的值,然后将p1指向的值赋给p2指向的地址,将p2指向的值赋给p1指向的地址,实现了两个变量的值交换。注意,在调用swap函数时,需要传入a和b的地址,即&符号。
相关问题
void swap(int *p1,int *p2) //定义swap函数 { int *temp; *temp=*p1; *p1=*p2; *p2=*temp; } 为什么这个不对
你提供的代码有一个问题,即`temp`指针没有被正确初始化。在执行`*temp = *p1;`这行代码时,由于`temp`指针没有指向任何有效的内存位置,会导致未定义的行为。
为了修正这个问题,你需要为`temp`指针分配内存空间,或者使用一个已经存在的变量来作为中间变量。下面是两种修正的方法:
1. 使用已经存在的变量作为中间变量:
```c
void swap(int *p1, int *p2) {
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}
```
2. 分配内存空间给`temp`指针:
```c
void swap(int *p1, int *p2) {
int *temp = (int*)malloc(sizeof(int));
*temp = *p1;
*p1 = *p2;
*p2 = *temp;
free(temp); // 释放内存空间
}
```
这两种修正方法都可以正确地交换两个指针所指向的值。
希望能够帮助到你。如果还有其他问题,请随时提问。
交换数字,用指针做函数参数实现(指针) 题目描述 题目要求同上一题,即对输入的两个整数按大小顺序输出。现要求用函数处理,而且用指针类型的数据作函数参数。 编写程序,使用指针将两个int类型数交换,要求定义一个函数void swap(int *p1, int *p2)实现
这个问题我们之前已经回答过了,下面是实现交换两个数字的代码,使用指针作为函数参数:
```c
#include <stdio.h>
void swap(int *p1, int *p2) {
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}
int main() {
int num1, num2;
printf("请输入两个整数:\n");
scanf("%d%d", &num1, &num2);
printf("交换前:num1=%d, num2=%d\n", num1, num2);
swap(&num1, &num2);
printf("交换后:num1=%d, num2=%d\n", num1, num2);
return 0;
}
```
在这个程序中,我们定义了一个函数 `swap`,接受两个指针类型的参数 `p1` 和 `p2`,用来交换它们所指向的变量的值。在 `main` 函数中,我们先输入两个整数,然后输出它们的原始值,接着调用 `swap` 函数,将两个整数的指针作为参数传递进去,进行交换操作。最后输出交换后的结果。
注意,我们将指针 `&num1` 和 `&num2` 作为参数传递给 `swap` 函数,这样函数内部就可以通过指针来修改 `num1` 和 `num2` 的值,达到交换的目的。