【发布时间】:2017-07-13 21:58:31
【问题描述】:
我是 C++ 新手,之前只学过 MATLAB。
我的Q是关于以下函数的输入参数,它们通过值、引用和指针调用变量。
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
}
由于我的 Q 不是关于上述函数如何工作,而是关于我如何调用它们,所以我省略了代码。所以,我知道当 i1 和 12 为 int 时,我们通过键入 SwapbyRef (i1,i2)、SwapbyRef (i1,i2) 和 SwapbyPoint(&i1,&i2) 来调用上述函数。
这让我对自己的生活感到困惑。好的,我知道第一个函数接受值并且有意义。但是在第二个中,仅通过 i1 和 i2 调用没有意义,因为在定义函数时,我们将其输入设置为 &a 而不仅仅是 a 但它仍然运行。同样在第三个中,我们将输入参数设置为一个指针,即*a,但我们在调用它时传递了一个地址&a(如0x7956a69314d8)。
为什么当我们向函数传递错误类型的输入时它会运行? 例如,一个 Matlab 类比,它看起来像将一个 char 传递给一个 int 函数。帮助!
【问题讨论】: