Decode1:
void decode1(int *xp, int *yp, int *zp){
int x = *xp;
int y = *yp;
int z = *zp;
xp = &z;
yp = &x;
zp = &y;
}
Decode2:
void decode2(int *xp, int *yp, int *zp){
int x = *xp;
int y = *yp;
int z = *zp;
*xp = z;
*yp = x;
*zp = y;
}
Decode1会将指针更改为z,x和y的地址。 Decode2将改为改变指针地址的值。这两种方法可以互换吗?是否存在一个比另一个更正确的情况?
答案 0 :(得分:4)
Decode2是正确的程序。在Decode1中,在调用堆栈结束后,您在xp,yp,zp中分配的地址将消失。
答案 1 :(得分:3)
不,它们不可互换,也不会做同样的事情。
decode1
将无效,decode2
将起作用(假设您要交换变量)。
decode1
函数在函数执行时将x
,y
和z
放在堆栈上,这些变量仅存在。它返回这些变量的那一刻不再指向有效的内存。此外,指针xp
,yp
和zp
是传递给函数的指针的副本,因此您不会修改原始指针(因此在函数中更改它们)绝对没有。)
decode2
功能将按预期工作。
答案 2 :(得分:2)
decode1
尝试返回指向局部变量的指针但最终什么都不做。使用decode2
。