C++
#include <iostream>
using namespace std;class Box
{
public:
int x;
};
/****值传递 在函数栈中复制了一份外部变量的值。
与java对象是引用类型,函数栈中只保留对象地址不同,
在C++中,复制整个对象的内容到函数栈中。
****/
void Fun1(Box b)
{
Box b1;
b1.x=6;
b=b1;
// b.x=1;
}
void Fun2(Box * b)
{
// b->x=2;
Box b1;
b1.x=8;
b = &b1;
}
/***引用传递 在函数栈中存放的是实参地址,
但是采用间接寻址方式,所以任何操作都相当于在外部变量上执行的
***/
void Fun3(Box & b)
{
Box b1;
b1.x = 9;
b=b1;
//b.x=3;
}
int main(){
Box b;
b.x=10;
Fun1(b);
// Fun2(&b);
//Fun3(b);
cout<<b.x<<endl;
return 0;
}
JAVA
public class A {
int x;
}
//java传引用类型参数时与C++的指针传参过程相似。
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
A a= new A();
a.x=0;
System.out.println("原值:"+a.x);
func2(a);
System.out.println("执行func2之后:"+a.x);
func3(a);
System.out.println("执行func3之后:"+a.x);
func1(a);
System.out.println("执行func3之后:"+a.x);
}
public static void func1(A a) {
a.x=1;
}
public static void func2(A a) {
a=null;
}
public static void func3(A a) {
A a0=new A();
a0.x = 3;
a=a0;
}
}
java代码执行结果: