浅谈c++javajavascript之传参
本⽂主要梳理了⼏种语⾔的传参机制,即关于传值、传引⽤之争
最近开始学node.js搭后端服务器时,碰到这样⼀句话 java只有⼀种传参机制就是传值
javascript其⼤部分语法规范取⾃于JAVA语法规范, 那么这种句话也适⽤于它,于是也有  javascript只有⼀种传参机制就是传值
为了理解这句话,我从个⼈感觉较为接近底层的语⾔c++写⼀些测试,代码如下
#include<iostream>
using namespace std;
class Test
{
public:
int x;
Test(int nx);
};
Test::Test(int nx){
x = nx;
}
void change(Test *qt){
qt->x = 2;
  Test t(3);
  qt = &t;
}
int main(){
void change(Test *qt);
Test t(1);
Test *qt = &t;
change(qt);
cout<< qt->x <<endl;
return1;
}
执⾏结果为2
这⾥,qt是指针,在change函数中指向⼀个新的对象后,为什么结果不是输出3呢?
原因是,在这⾥依然是传值,只不过传递是qt的内存地址,该内存地址指向⼀个对象,可以在change函数中改变其对象以期main函数的对象产⽣变化(因为是同个地址指向的同⼀对象),但如果使⽤赋值符号赋⼀个新的对象,传值不会影响到原来的参数
接下来,改成传引⽤:
void change(Test *&qt){
qt->x = 2;
  Test t(3);
  qt = &t;
javascript高级语法}
int main(){
void change(Test *&qt);
Test t(1);
Test *qt = &t;
change(qt);
cout<< qt->x <<endl;
return1;
}
执⾏结果为3
这⾥传值和传引⽤都很清楚,那么⽤javascript写⼀段例⼦:
function Test(nx){
this.x = nx;
}
function change(t){
t.x = 2;
t = new Test(3);
}
var t = new Test(1);
change(t);
console.log(t.x);
执⾏结果为2
从执⾏结果来看,这⾥跟c++第⼀个实例很像,可猜测java/javascript内部实现逻辑应该差不多,当传递的是⾮基本类型(如数
字,boolean)时,将按值传递其对象的地址(字符串也是对象),⽽之所以说,java/javascript 只有⼀种按值传递这种⽅式,是因为其它⼤部份语⾔如c++/php都提供了⽤&传引⽤的⽅式
那么,传引⽤是⼀个什么过程呢?
⽐如:
int a = 1; int &b = a;
此时 b 是 a 的⼀个别名,a和b都是对同⼀内存块的⾼级语⾔的描述标识,在程序执⾏过程中并没有存放,⽽是在编绎过程中将全局变量与程序连接起来,
这⾥涉及到编绎原理,暂时没有深究下去

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。