zoukankan      html  css  js  c++  java
  • 指针做函数参数 (间接赋值是指针存在的最大意义)

    写一个子函数供main函数调用,要求交换main中临时变量 int i, int j。 怎么实现?

    ① 像下面这么写行不行?

    void Swap(int a, int b)
    {
      int buf;
      buf = a;
      a = b;
      b = buf;
      return;
    }

    肯定不行,main函数中调用Swap(i, j)。虽然把形参i,j的值传给了a,b。但是Swap函数中改变的是a,b。根本无法改变 i 和 j的值。

    ② 在Swap函数中交换a,b的值,然后return a, b的值,用i,j去接收返回值行不行?

      也不行,因为return只能返回一个返回值,这儿要改变二个值

    ③ 用指针做函数参数,给 i,j 间接赋值实现交换i,j 的值,代码如下:

    void Swap(int *pa, int *pb)
    {
      int buf;
      buf = *pa;
      *pa = *pb;
      *pb = buf;
      return;
    }

    int main(void)
    {
      int i = 1;
      int j = 2;
      Swap(&i, &j);

      printf("i = %d j = %d ", i, j);
      return 0;
    }

    运行结果如下,成功交换i,j的值:

     综上: 如果希望在另外一个函数中改变本函数中变量的值,在调用函数时只能传递该变量的地址。

    PS: 传指针和传数据相比还有一个好处就是节约内存。我们知道,传数据拷贝的是内存单元的数据,如果数据很多的话拷贝过来都要为它们分配内存。

      而传指针的话只需要传递 4 字节的地址就行了。而且传数据非常消耗效率,为形参分配内存需要时间,拷贝需要时间,最后结束了返回还是需要时间。

      前面说过,return 时系统会先自动创建一个临时变量来存放返回的值。所以传数据时很消耗效率,而传指针就是为了提高效率。

      

    指针做函数参数很重要,封装API提供给别人使用的话经常用到

  • 相关阅读:
    结巴分词 0.14 版发布,Python 中文分词库
    Lazarus 1.0.2 发布,Pascal 集成开发环境
    Android全屏 去除标题栏和状态栏
    服务器日志现 Android 4.2 传将添多项新特性
    Percona XtraBackup 2.0.3 发布
    长平狐 Android 强制设置横屏或竖屏 设置全屏
    NetBeans 7.3 Beta 发布,全新的 HTML5 支持
    CppDepend现在已经支持Linux
    GromJS 1.7.18 发布,服务器端的 JavaScript
    Apache OpenWebBeans 1.1.6 发布
  • 原文地址:https://www.cnblogs.com/fengxing999/p/10237599.html
Copyright © 2011-2022 走看看