形参的改变如何影响实参

来源:互联网 发布:mac豆沙色口红推荐 编辑:程序博客网 时间:2024/05/17 05:56

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

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

2. 全局变量

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

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


3. 指针

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

#include<iostream>using namespace std;int main(){int m,n=10;m=n;cout<<&m<<" "<<&n;//输出0018FF44 0018FF40int *p,*q;p=q=&n;cout<<q<<" "<<p;//输出0018FF40 0018FF40return 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);//输出5return 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++中的概念,其相当于为变量起了个别名。其在初始化时必须赋值,且赋值后在程序中不可更改,这两点和指针有明显的区别。

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

0 0
原创粉丝点击