赞
踩
在编程中,形参的改变是无法影响实参的,比如下面的代码:
- #include<stdio.h>
- void fun(int m)
- {
- m=5;
- }
- int main()
- {
- int n=10;
- fun(n);
- printf("%d",n);//输出10
- return 0;
- }
那么有什么办法能将数据返还给调用自己的上层函数呢?
下面我简单记录下现在想到的几种办法:
1. return
- #include<stdio.h>
- int fun(int m)
- {
- m=5;
- return m;
- }
- int main()
- {
- int n=10;
- n=fun(n);
- printf("%d",n);//输出5
- return 0;
- }
return的缺点是每次只能返回一个参数;如果想返回多个,可能需要将数据存入数组,然后将数组首地址返回给主调函数,较为麻烦。
- #include<stdio.h>
- int n=10;
- void fun1()
- {
- n=5;
- }
- void fun2()
- {
- int n=7;
- printf("%d",n);//输出7
- }
- int main()
- {
- printf("%d",n);//输出10
- fun1();
- printf("%d",n);//输出5
- fun2();
- printf("%d",n);//输出5
- return 0;
- }

虽然说全局变量没有了个数的限制,而且遇到函数中同名局部变量时,全局变量还不起作用(县官不如现管)。
但是毕竟大型工程并不是由一人编写的,一个地方全局变量的改动将会影响整个工程,所以尽量还是少用。
3. 指针
指针是直接指向内存单元的:
- #include<iostream>
- using namespace std;
- int main()
- {
- int m,n=10;
- m=n;
- cout<<&m<<" "<<&n;//输出0018FF44 0018FF40
- int *p,*q;
- p=q=&n;
- cout<<q<<" "<<p;//输出0018FF40 0018FF40
- return 0;
- }
变量m与变量n的地址不同,因此一方改变后互不影响;p,q均指向变量n,在内存在指向同一单元,一方改变互有影响。
- #include<stdio.h>
- void fun(int *p)
- {
- *p=5;
- }
- int main()
- {
- int n=10;
- fun(&n);
- printf("%d",n);//输出5
- return 0;
- }
4. 引用
- #include<stdio.h>
- void fun(int& m)
- {
- m=5;
- }
- int main()
- {
- int n=10;
- fun(n);
- printf("%d",n);//<span style="font-family: Arial, Helvetica, sans-serif;">输出5</span>
- return 0;
- }
引用是C++中的概念,其相当于为变量起了个别名。其在初始化时
必须赋值,且赋值后在程序中
不可更改,这两点和指针有明显的区别。
综上,推荐使用指针和引用将被调函数的数据返回给主调函数。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。