在编程中,形参的改变是无法影响实参的,比如下面的代码:
#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的缺点是每次只能返回一个参数;如果想返回多个,可能需要将数据存入数组,然后将数组首地址返回给主调函数,较为麻烦。
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);//输出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++中的概念,其相当于为变量起了个别名。其在初始化时
必须赋值,且赋值后在程序中
不可更改,这两点和指针有明显的区别。
综上,推荐使用指针和引用将被调函数的数据返回给主调函数。