在公开课上看见的代码
void
swap(*a,*b)
{
int tem =*a; (1)
*a=*b; (2)
*b=tem; (3)
}
假设a=1存在地址123,b=2存在地址456,于是*a=123,*b=456,在(1)后tem=1,*tem=123(交换后结果为a=2,*a=456,b=1,*b=123)还是*tem为另外值如xxx(交换后结果为a=2,*a=456,b=1,*b=xxx);
在(1)中tem是产生新xxx空间,然后复制a的值再指过去。还是直接指向a的原有空间123。(3)中是直接将*b指向tem指向的空间吗。
在函数的参数里看到“*”,指的是调用该函数时要传指针(地址);
在语句里看到“* ”时,比如*a,不是指取a的值,而是指把a的值作为地址,从该地址去取值。
首先你这个问题问的就不对啊, a是一个int类型的指针,a就代表了一块内存中的地址*a为这块内存中所存的值。int tem是一个新分配的int型变量,其地址就是一个随机的值(比如说0x120)。对于3,是直接将tem的值赋值给b所指向的内存地址。例如b指向0x234这块内存,这块内存的内容为tem所对应的值
这个函数就是一个交换的函数 传参的时候 是把两个地址传过来 然后 *a就表示这个地址里面的值 *b也是这样
然后就定义一个新的变量tem 作为交换的中间变量 然后实行交换 最后 *a的值和*b的值发生了交换
也就是a这个地址里面的值和b这个地址里面的值发生了交换 所以实现了交换