#include<stdio.h> void swap(int *p1,int*p2) { int t; t=p1; p1=p2; p2=t; } int main() { int a,b,*p1,*p2; scanf("%d %d",a,b); *p1=&a; *p2=&b; swap(p1,p2); printf("%d %d",*p1,*p2); return 0; } 请改正程序的错误
时间: 2023-08-07 17:05:43 浏览: 150
这段代码有几个错误,以下是修正后的代码:
```c++
#include <stdio.h>
void swap(int *p1, int *p2) {
int t;
t = *p1; // 这里应该取指针所指的值
*p1 = *p2;
*p2 = t;
}
int main() {
int a, b, *p1, *p2;
scanf("%d %d", &a, &b); // 修正了输入格式
p1 = &a;
p2 = &b;
swap(p1, p2);
printf("%d %d", *p1, *p2);
return 0;
}
```
主要的问题有:
1. `swap` 函数中,指针所指的值没有交换,而是交换了指针本身,应该改为:
```c++
t = *p1;
*p1 = *p2;
*p2 = t;
```
2. `scanf` 函数的第二个参数应该是 `&a` 和 `&b`,表示将输入的值存储到变量 `a` 和 `b` 的地址中。
```c++
scanf("%d %d", &a, &b);
```
3. 在程序中没有为指针 `p1` 和 `p2` 分配内存,应该改为:
```c++
int *p1, *p2;
p1 = &a;
p2 = &b;
```
相关问题
#include<stdio.h> void swap1(int *p1, int *p2) { int t; t = *p1; *p1 = *p2; *p2 = *p1; } void main() { int a = 3; int b = 5; int* pa = &a, * pb = &b; if (a < b) swap1(pa,pb); }
这段代码中的swap1函数实现的是交换两个整数的值,但是代码中存在问题。在交换两个整数的值时,需要将第一个整数的值存储到一个临时变量中,然后再将第二个整数的值赋给第一个整数,最后再将临时变量的值赋给第二个整数。但是代码中的第三行 "*p2 = *p1;" 实际上是将第一个整数的值赋给了第二个整数,这样会导致两个整数的值相同,而不是实现交换。正确的代码应该是:
```
void swap1(int *p1, int *p2) {
int t;
t = *p1;
*p1 = *p2;
*p2 = t;
}
```
此外,main函数中没有输出结果的语句,你可以添加一个printf语句来输出交换后的结果。
以下程序功能为通过函数调用实现两个变量值交换,填空完成程序。#include<stdio.h> void swap(int *pa,int *pb) int t; t=*pa;*pa=*pb; /***************FILL****************/ 1_ ; void main() int a,b,*p1=&a,*p2=&b; p1=&a; /***************FILL****************/ 2_; scanf("%d%d",&a,&b); printf("A=%d,B=%d\n",a, b) ; swap(pl,p2); printf("A=%d,B=%d\n",a,b); }
以下是正确的程序代码:
```
#include<stdio.h>
void swap(int *pa,int *pb) {
int t;
t = *pa;
*pa = *pb;
*pb = t;
}
void main() {
int a, b, *p1 = &a, *p2 = &b;
p1 = &a;
p2 = &b;
scanf("%d %d", &a, &b);
printf("A=%d,B=%d\n", a, b);
swap(p1, p2);
printf("A=%d,B=%d\n", a, b);
}
```
注:程序中填空部分应该为 `*pb=t;`。
阅读全文