• 指针做函数参数 (间接赋值是指针存在的最大意义)


    写一个子函数供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提供给别人使用的话经常用到

  • 相关阅读:
    C/C++中的内存对齐 C/C++中的内存对齐
    Java编程提高性能时需注意的地方
    微软HoloLens技术解谜
    MySQL索引原理及慢查询优化
    mysql 2006
    第9周个人总结
    第十周任务安排
    下一阶段学习安排
    写在软考弃考之后
    第九周任务安排
  • 原文地址:https://www.cnblogs.com/fengxing999/p/10237599.html
Copyright © 2020-2023  润新知