当前位置:   article > 正文

形参的改变如何影响实参_数组形参怎么影响实参

数组形参怎么影响实参

在编程中,形参的改变是无法影响实参的,比如下面的代码:

  1. #include<stdio.h>
  2. void fun(int m)
  3. {
  4. m=5;
  5. }
  6. int main()
  7. {
  8. int n=10;
  9. fun(n);
  10. printf("%d",n);//输出10
  11. return 0;
  12. }

那么有什么办法能将数据返还给调用自己的上层函数呢?


下面我简单记录下现在想到的几种办法:

1. return

  1. #include<stdio.h>
  2. int fun(int m)
  3. {
  4. m=5;
  5. return m;
  6. }
  7. int main()
  8. {
  9. int n=10;
  10. n=fun(n);
  11. printf("%d",n);//输出5
  12. return 0;
  13. }
return的缺点是每次只能返回一个参数;如果想返回多个,可能需要将数据存入数组,然后将数组首地址返回给主调函数,较为麻烦。

2. 全局变量

  1. #include<stdio.h>
  2. int n=10;
  3. void fun1()
  4. {
  5. n=5;
  6. }
  7. void fun2()
  8. {
  9. int n=7;
  10. printf("%d",n);//输出7
  11. }
  12. int main()
  13. {
  14. printf("%d",n);//输出10
  15. fun1();
  16. printf("%d",n);//输出5
  17. fun2();
  18. printf("%d",n);//输出5
  19. return 0;
  20. }
虽然说全局变量没有了个数的限制,而且遇到函数中同名局部变量时,全局变量还不起作用(县官不如现管)。

但是毕竟大型工程并不是由一人编写的,一个地方全局变量的改动将会影响整个工程,所以尽量还是少用。


3. 指针

指针是直接指向内存单元的:

  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int m,n=10;
  6. m=n;
  7. cout<<&m<<" "<<&n;//输出0018FF44 0018FF40
  8. int *p,*q;
  9. p=q=&n;
  10. cout<<q<<" "<<p;//输出0018FF40 0018FF40
  11. return 0;
  12. }
变量m与变量n的地址不同,因此一方改变后互不影响;p,q均指向变量n,在内存在指向同一单元,一方改变互有影响。

  1. #include<stdio.h>
  2. void fun(int *p)
  3. {
  4. *p=5;
  5. }
  6. int main()
  7. {
  8. int n=10;
  9. fun(&n);
  10. printf("%d",n);//输出5
  11. return 0;
  12. }

4. 引用

  1. #include<stdio.h>
  2. void fun(int& m)
  3. {
  4. m=5;
  5. }
  6. int main()
  7. {
  8. int n=10;
  9. fun(n);
  10. printf("%d",n);//<span style="font-family: Arial, Helvetica, sans-serif;">输出5</span>
  11. return 0;
  12. }
引用是C++中的概念,其相当于为变量起了个别名。其在初始化时 必须赋值,且赋值后在程序中 不可更改,这两点和指针有明显的区别。

综上,推荐使用指针和引用将被调函数的数据返回给主调函数。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/pgrmghi/article/detail/63092
推荐阅读
相关标签
  

闽ICP备14008679号