写在前面:
其实这是大一的知识,但是很久了也有一点淡忘,加上复习编译原理又捡起来看了看,写个简单的程序帮助理解吧。
值传递、引用传递、地址传递:
#include<iostream>
//值传递
int get_val(int arg){
arg+=1;
return arg;
}
//引用传递
int get(int &arg){
arg+=1;
return arg;
}
//地址传递
int get(int *arg){
*arg+=1;
return *arg;
}
//入口
int main(){
int a=0;
int b=0;
int c=0;
get(a);
std::cout<<" 引用传递 -->原变量"<<a<<std::endl;
get_val(b);
std::cout<<" 值传递 -->原变量"<<b<<std::endl;
get(*c);
std::cout<<" 地址传递 -->原变量"<<c<<std::endl;
}
程序输出:
引用传递 -->原变量1
值传递 -->原变量0
地址传递 -->原变量
解析:
值传递只是将变量地址中存放的值赋给了新开辟的局部变量。
引用传递,引用其实是变量的别名,就像 小明在学校叫 王小明,在家里叫明明一样,都指的是小明这个人。我在路上叫明明或者王小明他都会答应。 引用传递实际上是将原变量作为局部变量放入了函数中
地址传递是将原变量的地址作为参数传入函数,对地址的相关操作其实作用在原变量上