对输入的两个整数按大小顺序输出 我有一点不明白啊

来源:百度知道 编辑:UC知道 时间:2024/05/17 05:17:46
程序如下:
#include<stdio.h>
void main()
{
void swap(int *p1,int *p2);
int a,b;
int *pointer_1,*pointer_2;
scanf("%d,%d",&a,&b);
pointer_1=&a;pointer_2=&b;
if(a<b)
swap(pointer_1,pointer_2);
printf("\n%d,%d\n",a,b);
}
void swap(int *p1,int *p2)
{
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
请问:不是"单向传送"使形参值的改变不能使实参值改变的吗
为什么这里a 和 b 的值改变了?
书上有说明,可不怎么看的懂

这里是传递的地址(就是通过指针),这样实际是对这两个整数的内存地址的操作,自然改变了他们的值。

该题中程序工作原理:
整数 指针
a <- pointer_1
b <- pointer_2
交换后:
整数
b <- pointer_1
a <- pointer_2

虽然是单向传递,,,但是,这里用的是指针

指针的传递 传递的就是地址,就是说把变量a b的地址传递

进而把地址相互交换

我家的门牌是103,里面是4口人,对门家的门牌是104里面有2口人,两个家的人数是不变的,也就是在内存中的位置是不变的,如果我把门牌换过来,也就是把指针换下,那103号就有2口人,104里面就有4口人,这就交换了,明白吗?

传的是指针,不是值