c++ - 关于 C++ 中的指针和引用的困惑

标签 c++ pointers reference

我有一堆这样的代码:

#include <iostream>
using namespace std;

void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

int main() {
    int a;
    int b;
    a = 7;
    b = 5;
    swap(a, b);
    cout << a << b;

    return 0;
}

此代码执行交换过程,就像我想要交换 2 个数字一样,但是当我想要来自用户的两个数字时,如下所示;

int a;
int b;
cin >> a;
cin >> b;
swap(a, b);
cout << a << b;

编译器给了我一个关于 intint* 错误的错误,这是预期的。为什么我没有使用带有 & 运算符的方法,但第一个代码进行了正确的交换?

最佳答案

在第一个示例中,调用 std::swap,因为您的 使用命名空间 std。 第二个例子和第一个完全一样,所以你可能没有用。

无论如何,如果您将函数重命名为 my_swap 或类似名称(并更改每一次出现),那么第一个代码将无法正常工作,正如预期的那样。或者,删除 using namespace std 并显式调用 std::cinstd::cout。我会推荐第二个选项。

关于c++ - 关于 C++ 中的指针和引用的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13402789/

相关文章:

c++ - 如何使用 C++ 以跨平台方式找到用户的主目录?

c++ - ListView 列的宽度不受尊重

c - 在函数中使用后将 char 指针设置为 NULL

c++ - 模板接口(interface) - 通过引用或值使用

c++ - 如何在 header 中公开引用变量?

c++ - 如何使用此 OpenMP 关键部分避免此原始指针?

c++ - 类组合 - 无法从 'int' 转换为类

c++ - 使用 C++ 在 Windows 中检测 USB 插入/移除事件

c - 在 C 程序中使用 typedef 时出现问题

android - 当传递给 JNI 层下的 C 函数时,指针的地址发生变化