C语言学习:在函数中加强对指针的理解

先看一段程序以及运行结果:

 红色框为主函数,黄色框为定义的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;

此时

扫描二维码关注公众号,回复: 16604731 查看本文章

        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。

结束,希望可以加强对指针的理解

        

猜你喜欢

转载自blog.csdn.net/weixin_45041054/article/details/131751696