C++
#include <iostream>
using namespace std;
void fun1(int tmp){ // 值传递
cout << &tmp << endl;
}
void fun2(int * tmp){ // 指针传递
cout << tmp << endl;
}
void fun3(int &tmp){ // 引用传递
cout << &tmp << endl;
}
int main()
{
int var = 5;
cout << "var 在主函数中的地址:" << &var << endl;
cout << "var 值传递时的地址:";
fun1(var);
cout << "var 指针传递时的地址:";
fun2(&var);
cout << "var 引用传递时的地址:";
fun3(var);
return 0;
}
/*
运行结果:
var 在主函数中的地址:0x23fe4c
var 值传递时的地址:0x23fe20
var 指针传递时的地址:0x23fe4c
var 引用传递时的地址:0x23fe4c
*/
说明:从上述代码的运行结果可以看出,只有在值传递时,形参和实参的地址不一样,在函数体内操作的不是变量本身。引用传递和指针传递,在函数体内操作的是变量本身。
我们知道函数调用的方式,大部分的编译器按照函数形参定义的逆序,依次将参数压入栈内,上述提到参数的形式,如果是值传递,则压入栈中的是一个临时变量,该变量与传入的值内容相同;如果是指针传递或者引用传递,则压入栈的可能是一个临时的指针变量,该指针指向与传入的指针指向的内容相同。从函数调用机制来开,不管何种调用所有实参的传入时都在栈中开辟了空间。
阅读量:1256
点赞量:0
收藏量:0