C(001):关于指针在变量跨函数调用的应用——以Swap函数为例【001】

指针在C语言中是重要概念,它是一个存储地址的变量。文章解释了指针如何通过取地址符`&`获取变量地址,以及解引用符`*`用于访问存储的地址所指向的值。通过Swap函数的例子,展示了指针如何实现变量间的值交换,强调了解引用在函数调用中的关键作用。不正确地使用指针(如未解引用)可能导致预期外的结果。
摘要由CSDN通过智能技术生成
  • 什么是指针

    在c语言中,相信指针是非常让大家头疼的部分,总感觉他像是幽灵一样,飘忽不定,这来自于他的灵活性。但如果把指针搞清楚,相信你一定会爱上它的。

    指针的本质是一个变量,就如每一个数字变量都有一个无符号性的对应变量,c语言中的每一个数据类型又有其对应的变量

    int a; unsigned int b;
    ​
    int x=a; int* y=&b;

    那么,指针里面既然是变量,那么它装的是什么呢?

    答案是地址,我们通过指针的初始化过程可以发现,我们通过“&”这个取地址符,将”b”变量的地址放入了“y”中。就好像是,小明要找到小芳,他不需要记住小芳所有的信息,只需要小芳的微信号就可以,地址在这里,就是起着“微信号”的作用。

    事实上,指针就是地址,两个名词说的完全就是一回事,他们唯一的区别只在于翻译的不同。

    那么下一个问题,“*”在这里是什么意思呢?

    前文说了,地址也就是“&b”充当了微信号的意思,但小明如果想要找到小芳,光看着微信号是远远不够的他还需要十分关键的一步,那就是,“打电话”。“*”这个符号就是代表着“打电话”这个动作,他的名字叫做“解引用”。

    int *y=&b;
    printf("b=%d",*y);

    让我们再来看看这个式子,它表达了什么呢?

    首先,我们将“b”的地址复制给了“y”,这里的“*”表示的是定义指针变量,而非解引用。

    之后,我们使用“printf()”函数将“*y”打印到屏幕上。这里的“*”的作用则是解引用,即直接读取y地址所指向的值,即:变量b的值。

  • Swap函数:

    下面让我们看指针的一个具体应用

    #include<stdio.h>
    ​
    void Swap(int *x,int *y){
        int temp=*x;
        *x=*y;
        *y=temp;
    }
    ​
    int main(){
      
      int a=10;
      int b=20;
      printf("a=%d,b=%d\n",a,b);
      
      Swap(&a,&b);
      
      printf("a=%d,b=%d\n",a,b);
      return 0;
    }

    运行结果如下:

    在这个案例中,我们定义了"a"、"b"两个变量,并定义了一个使用指针类型变量的函数(即使用实参变量的函数)。

    之后通过Swap函数,将两个变量的地址传递给参数列表的指针。在函数内,通过解引用直接操作变量"a","b"。所以最终的结果是a与b交换了变量。

    下面是未使用解引用的结果:

    #include<stdio.h>
    ​
    void Swap(int *x,int *y){
        int temp=x;
        x=y;
        y=temp;
    }
    ​
    int main(){
      
      int a=10;
      int b=20;
      printf("a=%d,b=%d\n",a,b);
      
      Swap(&a,&b);
      
      printf("a=%d,b=%d\n",a,b);
      return 0;
    }

    运行结果如下:

    可见并未交换,其只是交换了x和y中存放的a和b的地址

  • 总结:

    1. 指针就是地址,是一种数据类型,对应的变量使用对应的指针类型。

    2. 指针内存放的是变量的地址,可以通过解引用来直接操作对应变量。

    3. 对于局部变量,指针可以帮助我们跨函数操作变量本身。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值