C++函数通过引用输入参数与通过指针输入参数

标签 c++ function pointers

我是 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/

相关文章:

c++ - 使用模板函数对列表容器进行排序

c++ - 我可以使用指针访问多维数组吗?

C++ string::size_type 错误

c++ - 即使通过引用返回时也会调用复制构造函数?

java - Java跨线程函数调用

c++ - 在 C++ 中声明指向结构的指针会自动为其成员分配内存。我错了吗?

c++ - 指向函数的指针的初始化数组

c++ - 无法针对 Fedora 中的 mongo C++ 驱动程序进行编译

c++ - 在窗口模式下设置/获取我的绝对鼠标位置

wordpress - WooCommerce 图像缩略图相同大小