分别对a和b输入值后没进行输出就调用了交换函数 所以第一次调用swap函数是实现了交换的 这时a=6,b=9;分别再对a和b以及a和b的地址进行输出(横线下的第一行),
再调用swap(p1,p2)后,同样进行了交换,结果为(横线下的第二行),再调用swap(&(*p1),&(*p2))后,a和b有交换了,输出结果为(横线下的第三行),所以三次调用swap函数都进行了a和b的交换
p1是一个变量保存这a的地址。p2同理。&a不是变量,他是a的地址,像123之类的值。
swap(&a,&b)是,函数先定义2个临时变量保存a的地址和b的地址,函数执行时会交互2个临时变量的内容,所以&a和&b没有变化。
swap(p1,p2),因为p1和p2都是变量,就不会定义临时变量了,直接交互p1和p2内容
请输入a和b的值:1 2
你输入的是a=2 ,b=1 ----->此处交换了一次swap(&a, &b)
-------------------
a=2,b=1,p1=%d,p2=%d ----->此处还是上一次的交换
a=1,b=2,p1=%d,p2=%d ----->此处还是上一次的交换swap(p1,p2)
a=2,b=1,p1=%d,p2=%d ----->此处还是上一次的交换swap(&(*p1),&(*p2))
swap函数只换指针所指向的值,并不会改变指针的值(地址)
你把这两句交换一下位置就是你预期的结果了
swap(&a,&b);
printf("你输入的是a=%d ,b=%d\n-------------------\n",a,b);
不懂