int main()
{
int x = 2, y = 4;
func(&x, &y);
printf("%d %d\n", x, y);
return 0;
}
void func(int *x, int *y)
{
int *temp;
temp = x;
x = y;
y = x;
}
您好
对于这段代码,我不知道为什么输出是2 4而不是4 4.因为f =()中的x = y表示x现在指向y的地址,而func()中的y = x表示y现在指向x的地址(即y),两个变量现在都指向y。
非常感谢!
答案 0 :(得分:2)
答案很简单:您更改func
内的指针值 - 但不是它们指向的值。我想你想交换变量(由于temp
var)。
此代码应该有效(交换值):
void func(int *x, int *y)
{
int temp = *x; // dereferencing the pointer to get the value it points at.
*x = *y;
*y = temp;
}
太保持你的初始期望(由于第二次分配而没有任何代码意义):
void func(int *x, int *y)
{
*x = *y;
*y = *x;
}
答案 1 :(得分:1)
不,func()
将收到这些地址的副本,这不会影响函数外部的变量 - func()
的所有变量都会在func()
退出后被丢弃
答案 2 :(得分:1)
您只是暂时将“x”的地址分配给func中的“y”地址。为了进行分配,您需要取消引用指针。
*x = *y;
*y = *x;
答案 3 :(得分:1)
试试这个
#include <iostream>
using namespace std;
void func(int *x, int *y);
int main()
{
int x = 2, y = 4;
func(&x, &y);
//printf("%d %d\n", x, y);
cout << "X - " << x << endl;
cout << "Y - " << y << endl;
return 0;
}
void func(int *x, int *y)
{
int temp;
temp = *x;
*x = *y;
*y = temp;
}
答案 4 :(得分:0)
您正在制作传入指针的副本,它们是您的函数的本地副本。您对他们所做的任何更改都不会影响外部。您应该通过引用&
捕获指针。
void func(int*& x, int*& y){
// as before...
}
现在,函数内部的更改将在其外部正确反映。虽然问题仍然存在。你传递的是局部变量的地址,并试图改变它们的指针 - 这是行不通的。获取变量&x
的地址时,会创建一个新的临时指针,该指针无法转换为引用指针。
这样做:
int main(){
int x = 2, y = 4;
int *px = &x, *py = &y;
func(px, py);
printf("%d %d\n",*px,*py);
}
编辑:如果您想要交换/设置x
和y
的值,而不仅仅是某些指针,请执行其他答案状态。
答案 5 :(得分:0)
问题是您正在尝试编写自己的std::swap
版本。这将有效:
int x = 2, y = 4;
std::swap(&x, &y);
printf("%d %d\n", x, y);
return 0;