C++ 交换函数-指针-混淆

C++ 交换函数-指针-混淆,c++,c,pointers,C++,C,Pointers,请注意,在代码中我没有使用指针,但我有这样的概念:如果我使用这个函数,那么当代码块完成时,值将返回正常值 但是代码是用指针编译的 我需要帮助,因为如果我有与指针相关的错误概念,我会感到困惑 void swap(int i, int j) { int temp = i; i = j; j = temp; } int main() { int a = 110; int b = 786; cout << "Before swapping t

请注意,在代码中我没有使用指针,但我有这样的概念:如果我使用这个函数,那么当代码块完成时,值将返回正常值

但是代码是用指针编译的

我需要帮助,因为如果我有与指针相关的错误概念,我会感到困惑

void swap(int i, int j) {
    int temp = i;
    i = j;
    j = temp;
}

int main() {
    int a = 110;
    int b = 786;
    cout << "Before swapping the value" << endl;
    cout << "'a' stores the value : " << a << endl;
    cout << "'b' stores the value : " << b << endl;
    swap(a,b);
    cout << "\nAfter swapping the value" << endl;
    cout << "'a' stores the value : " << a << endl;
    cout << "'b' stores the value : " << b << endl;
    swap(a, b);
    cout << "\nAnd back again swapping the value" << endl;
    cout << "'a' stores the value : " << a << endl;
    cout << "'b' stores the value : " << b << endl;

    return 0;
}
交换函数不会交换main范围内的值,因为i和j是函数局部变量。要获得预期的行为,应该通过引用传递

void swap(int& i, int& j) {
    int temp = i;
    i = j;
    j = temp;
}
您的代码将被删除

猜测:
我认为您正在使用名称空间std;从你正在碰撞的标准库中的一个包含中。我认为在您的情况下调用了函数的std::版本,这是代码正常工作的唯一原因。

如果您想使用指针交换,应该传递指针:

void swap(int *a, int*b)
{
  int temp = *a;
  *a = *b;
  *b = temp;
}
正如另一位用户所指出的,通过引用传递是另一种选择

PS:您的查询与函数指针无关,因此我将从您的查询中删除函数指针标记。

您包含的iostream头似乎还包括实用程序头;您可以在程序中得到std::swap的定义

因为您没有显示它,但可能使用了namesapce std;在代码中,swap的重载集包含这两个重载。根据重载解析规则,称为correct1重载


1对于正确的定义,在本例中

您的程序的实际输出是什么?你期望的产量是多少?请编辑您的问题,将其包括在内。很抱歉,您是否声称交换有效,因为这不起作用:因为您传递的值意味着它复制了您的参数,并且没有给它们分配任何新值。请尝试使用宏进行交换:define swapi,j do{int temp=i;i=j;j=temp;}而使用std::swap交换值或std::swap_范围使用迭代器交换更多元素。是否在使用交换函数之前声明它们?您是否正在使用名称空间std;在顶端?请创建一个并向我们展示。这就是重点,这是编译后的图片-它给了我完美的答案-抱歉,我忽略了这一部分。我正常使用这一部分,出于好奇,我删除了指针并最终交换了值,这就是我启动此线程的原因:要更改函数名并检查它Hanks bro,这是我错过的部分。我已经改变了函数名,它还给了我本来应该有的值。@ StytTeLeLea+我是C++的新手,必须学习我的学位BCOZ,我在它周围工作,这个社区看起来很棒:“Philipp,YUP。如果您不小心,供应商更新可能会弄乱您的代码库。这就是为什么你应该总是1明确地包含你需要的所有东西,并且2将你的代码划分成命名空间来避免冲突。@ BaqarHussain如果你学习C++并且想正确地做它,我们有一个你可能想看的列表。