C/C++ - Auto & Reference
最编程
2024-01-25 17:18:21
...
引用参数使用 & 符号进行声明,表示该参数是一个引用。
void Fun(int& ref/*引用参数*/)
{
return;
}
引用参数在函数内部直接操作原始变量,而不会创建副本。
#include <iostream>
//创建副本 -> 将参数的值PUSH进STACK
void Fun2(int a)
{
}
//地址传递 -> 指针
void Fun3(int* p)
{
}
//地址传递 -> 引用
void Fun4(int& ref)
{
}
int main()
{
int Num = 0;
Fun2(Num); //int a = Num;
Fun3(&Num); //int* p = &Num;
Fun4(Num); //int& ref = Num;
return 0;
}
//Fun2
mov eax,dword ptr [Num]
push eax //创建副本
call Fun2 (04113B1h)
add esp,4
//Fun3
lea eax,[Num]
push eax //地址传递
call Fun3 (04113A7h)
add esp,4
//Fun4
lea eax,[Num]
push eax //地址传递
call Fun4 (04113B6h)
add esp,4
引用参数可以在函数内部修改原始变量的值。
#include <iostream>
//地址传递 -> 引用
void Fun4(int& ref)
{
//[ref] -> main->Num.Addr
ref = 2;
}
int main()
{
int Num = 0;
Fun4(Num); //int& ref = Num;
return 0;
}
通过引用传递参数可以实现函数的返回多个值的效果。
#include <iostream>
bool cc_OpenFile(const char* szFileName, int& nFileSize)
{
//TODO
bool bret = true;
if (bret)
{
nFileSize = 123;
}
return bret;
}
int main()
{
int FileSize = 0;
bool bret = cc_OpenFile("D:\\1.txt", FileSize);
return 0;
}