我试着写了以下函数:
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我想,当我们用另一个指针初始化一个指针时,在初始化的指针中,我们只是得到一个值的副本。不是这样的吗?
发布于 2015-06-15 01:00:28
要交换元素,应执行以下操作:
temp = first
first = second // Here you have "second = first". It's the other way around!
second = temp您在第二步中犯了一个错误,这导致您的reverse操作为这两个步骤都提供了first。关键思想是:您将一个值(first)存储到temp,然后使用以下操作可以覆盖该temp值(first),因为您不会丢失它。
发布于 2015-06-15 00:58:44
int *temp = &*first;你为什么要使用指针,你应该存储first指向的值进行交换。当您用另一个指针初始化指针时,您将获得该指针的副本,而不是指针所指向的值。
发布于 2015-06-15 01:15:23
目前,您的代码以冗余形式的语法保留了一个整数:
int *temp = &*first;不是保留指向first的指针,而是简单地保留first指向的值:
int temp = *first;现在,由于您保留了first的指针对象,因此可以修改指针:
*first = *second;最后,使用保留的值更改second的指针对象:
*second = temp;https://stackoverflow.com/questions/30832051
复制相似问题