#include
void swap(int *p1,int *p2)
{
int t;
t=*p1;
*p1=p2;
p2=t;
}
int main(void)
{
int a =1,b=2,a1,b1;
a1=&a;
b1=&b;
swap(a1,b1);
printf(“%d%d",a,b);
return 0;
}
这很简单啊,就是实现p1指向的值和p2指向的值进行交换,所以需要换来换去
t = *p1 就是将p1指针指向的值复制到临时变量t
然后 * p1 = * p2是将p2指向的值复制给p1指向的值
最后 * p2 = t是将临时变量t的值赋值给p2指向的值
看输出结果不就知道了
望采纳
指针是一种特殊的变量类型,它指向内存中的另一个变量。在这个程序中,函数swap接收两个指针参数p1和p2,然后交换它们指向的变量的值。
错误的地方在于,在交换变量的值的时候,它把指针变量p1的值(即内存地址)赋值给了指针变量p2,然后把指针变量p2的值(即原来的变量t)赋值给了指针变量p1,这是错误的。应该用下面的代码来交换变量的值:
void swap(int *p1, int *p2) {
int t;
t = *p1;
*p1 = *p2;
*p2 = t;
}
另外,在主函数中,指针变量a1和b1的定义应该写成这样:
int a = 1, b = 2, *a1, *b1;
a1 = &a;
b1 = &b;
在定义指针变量时,应该用*来声明指针变量,而不是用&来获取指针变量的值。
修改后的程序如下:
#include <stdio.h>
void swap(int *p1, int *p2) {
int t;
t = *p1;
*p1 = *p2;
*p2 = t;
}
int main(void) {
int a = 1, b = 2, *a1, *b1;
a1 = &a;
b1 = &b;
swap(a1, b1);
printf("%d%d", a, b);
return 0;
}