我是 C++ 的新手,之前只用过 MATLAB。
我的问题是关于以下函数的输入参数,这些函数通过值、引用和指针调用变量。
void SwapbyValue (int a, int b){
// Usual swapping code
}
void SwapbyRef (int &a, int &b){
// Usual swapping code
}
void SwapbyPoint(int *a,int *b){
//Usual swapping code
}
由于我的问题与上述函数的工作方式无关,而是与我如何调用它们有关,因此我省略了代码。所以,我知道当 i1 和 12 是 int 时,我们通过键入 SwapbyRef (i1,i2)、SwapbyRef (i1,i2) 和 SwapbyPoint(&i1,&i2) 来调用上述函数。
这让我的生活感到困惑。好的,我知道第一个函数接受值并且有意义。但在第二个中,仅通过 i1 和 i2 调用没有意义,因为在定义函数时,我们将其输入设置为 &a
而不仅仅是 a
而是它仍然运行。同样在第三个中,我们将输入参数设置为指针,即 *a
但我们在调用它时传递了一个地址 &a
(如 0x7956a69314d8)。
为什么当我们将错误类型的输入传递给函数时它会运行? 例如,一个 Matlab 类比,它看起来像是将一个 char 传递给一个 int 函数。帮助!
最佳答案
int &a 是对 int 的引用,意思是,它将接受所有已经存在的 int 变量。例如,你不能做的是 SwapbyRef(4, 5)
使用 SwapbyRef (int &a, int &b)
,因为 4 和 5 是临时整数,不存在于内存作为变量。
顺便说一句,您可能应该看看 C++ 中的引用是什么。我认为这对您最有帮助。
关于C++函数通过引用输入参数与通过指针输入参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42415432/