先看一段程序以及运行结果:
红色框为主函数,黄色框为定义的Swap函数,需要将a与b的值交换;但是运行结果并未交换。
原因:
int a = 10;
int b = 20;
分别开辟了两块内存空间,放置a的值10,以及b的值20;我们规定a的内存空间编号为①,b的内存空间编号为②。
当程序运行至Swap函数时,该函数又开辟三块新的内存空间为x,y,z,分别标号为③,④,⑤,并且将a的值赋给x,b的值赋给y;然后执行操作
z = x;
x = y;
y = z;
执行完成后:
z = 10;
x = 20;
y = 10;
此时
a = 10;
b = 20;
然而主函数仍然输出的是a,b,即内存空间①与②里面的内容。
没有交换成功,问题就出现在这里,对x与y的改变是独立的,与a与b无关。
我们想做的是将内存空间①与②里面的内容交换,这就要使用到指针。
用下面修改的程序来理解指针:
提前了解:int* pa = &a;
int*——指针变量
&a ——取a的地址(内存空间的位置,即上文的①)
*pa ——通过pa里面的地址,找到a(即*pa就是a)
那么
Swap(&a, &b)
即将a的地址赋给pa,将b的地址赋给pb。而pa与pb是指针变量。
接着
z = *pa---通过pa里面存的地址(即①的位置)找到a(10),并将里面的内容(即10)其赋给z;
*pa = *pb---通过pb里面存的地址(即②的位置)找到b(20),并将里面的内容(即20)赋给通过pa里面存的地址(即①的位置)找到的a
*pb = z---将z的值赋给通过pb里面存的地址(即②的位置)找到的b。
经过这段程序后①里面放的a已经换成20,②里面放的b已经换成10。
结束,希望可以加强对指针的理解