今天做了一道题,不能使用全局变量,main函数不能改变,只能改变调用函数,也用不了指针,所以想了许久,查找了许多资料,把过去知道的引用实践了。
返回值只能返回一个值,但是需要的值可能需要有多了,那么我们就需要有传值,怎么把值传递到该去的位置,有三个办法。值传递,指针传递,引用传递。
1.值传递,就是main函数上的值没有变化,但是是在调用函数上的值的变化,与主函数上无关。就是调用函数已经把主函数上的值 做好了。
int fun(int a,int b)
{
int c=a;
a=b;
b=c;
cout<<a<<" "<<b;
return 0;
}
int main()
{
int a,b;cin>>a>>b;
fun(a,b);
return 0;
}
2.指针传递,意思就是有另一个名字(新的东西)指向了原先想要改变的那个值,调用函数中,如果指针变化了,想要改变的那个值也一样会改变,同样在主函数是一样的,一个地址上的值改变了,指针会变,原先的定义的名字的值也会变。等于有个东西有俩个名字,常用的大名,不常有的小名,把一个名字指向的人变了,另一个名字也是被换了。
int fun(int *p, int *q)
{
int c = *p;
*p = *q;
*q = c;
return 0;
}
int main()
{
int a=2, b=3;cin>>a>>b;
int *p = &a, *q = &b;
fun(&a, &b);//当指针上的*p,*q的值变了,指向那个地址的,a,b值同样也会变,同样,如果a,b值变,那么指针上的值也会变。
return 0;
}
3.我感觉今天我实践的引用传递也是很重要,我开始喜欢上的这个办法。大概意思就是调用函数上的值变了,同样和指针差不多的是,main上的值也会变。
int fun(int &a,int &b)
{
int c=a;
a=b;
b=c;
return 0;
}
int main()
{
int a,b;cin>>a>>b;
fun(a,b);//当调用函数上的值变化了,那么主函数上的a,b值也是变化了。
return 0;
}
调用函数的命名和主函数上的命名无关,即使是全局变量和局部变量一样,也是优先局部变量,所以每个函数的命名使用只在那一个限制的范围内!
关于更详细的资料的公式化的介绍:http://blog.csdn.net/the_fire/archive/2009/06/13/4267058.aspx
本文主要是自己对关于值传递的学习。