在c语言的世界里有两种精灵,一个是“普通变量”,另一个是“指针变量”。其中,“指针变量”有一种魔法,就是加了*的指针变量能控制其所对应的“普通变量”的值。
在这个世界里有一类叫做函数的魔法空间,其中有一个叫swap的交换空间。这个魔法空间有一个魔法,就是当变量两个变量(无论是普通变量(如例2所示),还是指针变量(如例3所示))进入这个空间的时候,他们可以交换各自的身份,但是一旦出了这个空间,立马就又恢复了自己的身份。
原来的时候,小精灵们私下是可以自由交换身份的(如例1所示),可是有一天统治者说为了规范变量的行为,于是颁布了新规定:“不可以私下自己交换身份。”然而有些小精灵还是想改变自己的值,可是他们无论怎么在交换空间中游荡都无法做到真正的交换。
后来,普通变量和指针变量坐下来开了一个碰头会,发现利用指针变量的魔法就可以实现他们的目的了。他们是这样做的:让两个要交换值的普通变量对应的指针变量走进交换空间,进入空间的指针变量使用自己的加*魔法,这样他们可以控制交换空间外的其所对应普通变量了。就这样普通变量就在指针变量的控制下进行了交换(例4),等到两个指针变量走出交换空间恢复身份的时候,发现其对应的普通变量的值已经发生了变化。
例 1:int main()
{
int a,b,temp;
a = 10;
b = 20;
printf("a = %d, b = %d\n", a,b);
temp = a;
a = b;
b = temp;
printf("a = %d, b = %d", a,b);
}
>>a = 10, b = 20 >>a = 20, b = 10
例 2:void swap(int x, int y){
int temp;
temp = x;
x = y;
y = temp;
}
int main()
{
int a,b,temp;
a = 10;
b = 20;
printf("a = %d, b = %d\n", a,b);
swap(a,b);
printf("a = %d, b = %d", a,b);
}>>a = 10, b = 20>>a = 10, b = 20
例 3:void swap(int *x, int *y){
int *temp;
temp = x;
x = y;
y = temp;
}
int main()
{
int a,b;
int *p1, *p2;
a = 10;
b = 20;
p1 = &a;
p2 = &b;
printf("a = %d, b = %d\n", a,b);
swap(p1, p2);
printf("a = %d, b = %d", a, b);
}
>>a = 10, b = 20>>a = 10, b = 20
例 4:void swap(int *x, int *y){
int temp;
temp = *x;
*x = *y;
*y = temp;
}
int main()
{
int a,b;
int *p1, *p2;
a = 10;
b = 20;
p1 = &a;
p2 = &b;
printf("a = %d, b = %d\n", a,b);
swap(p1, p2);
printf("a = %d, b = %d", a, b);
}
>>a = 10, b = 20>>a = 20, b = 10