交换两个指针
Swapping two pointers
我正在尝试编写一个函数,该函数将两个指针作为参数,然后使第一个指针指向第二个指针所指向的对象,第二个指向第一个指针所指的对象。
void swap(int *x, int *y)
{
int *s;
s = x;
x = y;
y = s;
}
在主功能中,我会做一些类似的事情
int x, y;
swap(&x, &y);
std::cout << &x << " " << &y << std::endl;
但地址似乎没有改变。
相反,如果我取消引用指针并尝试更改值,则值将按预期进行交换。我想知道为什么这个函数不会改变指针指向的位置。
函数按值接受指针,因此它所做的任何修改在返回后都不可见。实际上,您正在交换指针的副本的值。
您要做的是std::swap
template <class T> void swap ( T& a, T& b )
{
T c(a); a=b; b=c;
}
当您使用相同的变量名来表示两种不同的东西时,您几乎总是会使自己的工作更加困难。
在您的函数之外,x
就是int
内部您的函数x
是一个pointer-to-int
这就是你困惑和烦恼的根源。
下面的代码不交换变量的地址
(事实上,我认为这是不可能的;编译器决定x
的地址。你不能更改它。
你只能更改存储在该地址的值。)
但我认为这就是你想要的:
void swap(int *ptr_x, int *ptr_y)
{
int temp;
temp = *ptr_x;
*ptr_x = *ptr_y;
*ptr_y = temp;
}
int main(void)
{
int x=5, y=9;
swap(&x, &y);
std::cout << &x << " " << &y << std::endl; // Sorry, Address of X and Y will always be the same
std::cout << x << " " << y << std::endl; // Now x is 9 and y is 5.
return 0;
}
相关文章:
- 一个对象的两个指针.删除了一个指针,对象仍然存在
- 如何将值添加到嵌套结构中,该结构在C++中有两个指针
- 比较两个指针时">="运算符的奇怪行为
- 根据下面的作者,如果两个指针指向不同的数组,则比较的第一个版本将未定义
- 为什么 fdump-class-hierarchy 为虚函数提供了两个指针 int vtable
- 错误 :"+" 无法添加两个指针
- 使与同一数组无关的两个指针减去未定义行为的基本原理是什么?
- 为什么当我在同一内存中各有两个指针时,我必须调用"delete"两次?
- 如何加入两个指针以将其串在一起并将其存储在数组或字符中
- 如何在多线程 c++ 17 程序中交换两个指针
- 这两个指针怎么能有相同的值
- 为什么两个指针都有相同的内存地址
- 两个指针之间的差异是合法的 c++17 常量表达式
- 为什么两个指向相同链接的两个指针在这里表现不同
- 这两个指针代码有什么区别
- 使用指针在Qt Creator UI中的其他两个指针之间切换
- 重写虚函数协变返回类型(两个指针)
- 想要一种在C++中交换两个指针的有效方法
- 在delete()之后不会断言两个指针都指向NULL
- 更改指针指向指针的位置,同时保持其他两个指针的值