我尝试编写以下函数:
typedef std::vector<int>::iterator v_itt;
void reverse(v_itt first, v_itt second)
{
std::cout << "first = " << *first << ", second = " << *second << std::endl;
int *temp = &*first;
*second = *first;
*first = *temp;
std::cout << "After reversing: first = " << *first << ", second = " << *second << std::endl;
}
但是当我试图调用它时,我得到了以下输出:
first = 322, second = 12
After reversing: first = 322, second = 322
我想,当我们用另一个指针初始化一个指针时,在初始化指针中我们只得到一个值的副本。这不是真的吗?
答案 0 :(得分:4)
要交换元素,您应该这样做:
temp = first
first = second // Here you have "second = first". It's the other way around!
second = temp
您在第二步中犯了一个错误,导致您的reverse
操作同时为first
提供first
。关键的想法是:您将值(first
)存储到temp,然后通过以下操作,您可以覆盖那个值(if(isset($_POST['ipaddress']) and $_POST['ipaddress'] != '')
),因为您赢了失去它。
答案 1 :(得分:2)
int *temp = &*first;
为什么使用指针,你应该存储first
指向交换的值。当您使用另一个指针初始化指针时,您将获得该指针的副本,而不是指针指向的值。
答案 2 :(得分:1)
目前,您的代码以冗余的语法形式保留整数:
int *temp = &*first;
不是将指针保留在第一位,而是保留首先指向的值:
int temp = *first;
现在,由于您保留了first的指针,您可以修改指针:
*first = *second;
最后,使用保留的值来更改第二个的指针:
*second = temp;