一、函数传值的分类:
二、按值传:
代码:
#include<iostream> using namespace std; //定义参数传递的函数 void sump(int m,int n){ int t; t=m; m=n; n=t; } int main(){ int a,b; cin>>a>>b; sump(a,b); cout<<a<<","<<b<<endl; return 0; }
讯享网
解释:按值传递的话只是传递了值,当调用的函数sump()结束后,m,n就会自动销毁,不会影响主函数中的a,b的值。
三、按地址传
1、指针变量传:
代码:
讯享网#include<iostream> using namespace std; //定义参数传递的函数 void sump(int *m,int *n){ int t; t=*m; *m=*n; *n=t; } int main(){ int a,b; //定义两个指针变量 int *p1,*p2; a=3;b=5 p1=&a; p2=&b; sump(p1,p2); cout<<a<<","<<b<<endl; return 0; }
解释:
扩充:当定义了一个指针变量*p时。在引用的时候,用p代表的是该指针,而*p代表的是该指针所指向的内容。
如图:

总结:当用指针变量传递参数时。有两种情况:1、交换指针所指向的内容,这时实参a,b的值会发生改变。2、交换指针,这时实参a,b的值不会发生改变。上面是交换指针所指向的内容。下面的例子1-1是交换指针。注意两者的区别。、

代码:
例1-1:
#include<iostream> using namespace std; //定义参数传递的函数 void sump(int *m,int *n){ int *t; t=m; m=n; n=t; } int main(){ int a,b; //定义两个指针变量 int *p1,*p2; a=3;b=5 p1=&a; p2=&b; sump(p1,p2); cout<<a<<","<<b<<endl; return 0; }
解释:与上面的不同之处就是把sump()函数中的中间变量t的类型改为了指针类型。这样交换的是m,n两个指针。a,b的值不受影响。意思就是原来m指针是指的a的地址,n指针指的是b的地址。经过交换,m指针指向b的地址,n的指针指向a的地址。a,b里面的值不变。改变的是外边指向他们的指针。
如图:

2、数组名传
代码:
讯享网#include<iostream> using namespace std; void sump(char b[]){//这里b[]可以写成*b b[]="world"; } int main(){ char arry[5]="hello"; sump(arry); for(int i =0;i<=arry.length;i++){ cout<<arry[i]<<endl; } return 0; }
解释:每个数组的数组名代表的就是第一个元素的地址。用数组名去传递相当于把数组的第一个元素的地址传了过去。有了第一个元素的地址,就可以找到该数组的其他元素,相当于找到了该数组。然后形参对数组的改变会直接映射到实参中,即形参改变数组的值,实参中数组的值也会改变。
3、引用类型传
引用类型是什么?
引用类型就相当于是给引用的参数起了一个别名。用这个别名去引用这个参数。它不产生副本,与原参数用的是一块地址空间。而一般的变量是产生了副本,是用的两块地址空间。引用类型传参给指针变量传参一样。形参改变变量会影响到实参中。
代码:
#include<iostream> using namespace std; int main(){ int i = 0; int &j = i; cout<<j<<i<<endl; return 0; }
解释:当i的值发生改变时,j的值也会发生改变。两者用的是同一块储存空间。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/36288.html