编写程序,定义一个函数void swap(int* p1,int* p2),该函数能实现两个变量的数值交换。主函数中定义两个整型变量,a,b,从键盘获取任意整型值给a,b,并在屏幕上打印其值,然后调用void swap(int* p1,int* p2)函数,实现a,b的值交换(提示,调用swap函数时,实参应该传入分别指向a和b的指针)。最后在主函数中将交换了值的a和b在屏幕上再次显示出来。
时间: 2024-02-03 11:15:20 浏览: 96
下面是实现该程序的代码:
```c
#include <stdio.h>
void swap(int* p1, int* p2) {
int tmp = *p1;
*p1 = *p2;
*p2 = tmp;
}
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;
}
```
程序中定义了一个`swap`函数,该函数接受两个指针参数,用于交换这两个指针所指向的变量的值。在主函数中,先从键盘获取两个整数,然后调用`swap`函数进行交换,最后输出交换后的结果。
相关问题
编写程序,定义一个函数void swap(int* p1,int* p2),该函数能实现两个变量的数值交换。主函数中定义两个整型变量,a,b,从键盘获取任意整型值给a,b,并在屏幕上打印其值,然后调用void swap(int* p1,int* p2)函数,实现a,b的值交换,用c语言编写
好的,以下是代码实现:
```
#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); // 释放内存空间
}
```
这两种修正方法都可以正确地交换两个指针所指向的值。
希望能够帮助到你。如果还有其他问题,请随时提问。
阅读全文