我想交换两个变量的值。这是我尝试过的:
方法一:
int a = 5, b = 6;
int temp = a;
a = b;
b = temp;
方法2:
int a = 5, b = 6;
int *p = a;
a = b;
b = p;
方法3:
int a = 5, b = 6;
a = a + b;
b = a - b;
a = a - b;
有没有什么有效的方法来解决这个交换问题并考虑内存管理?
int
值转换为指向 int
的指针分配给 指针。然后你做相反的转换。
int a = 5, b = 6;
int *p = a; //!!!wrong and compiler will warn you!!!!
a = b;
b = p;
int
值。如果您的中间值尺寸较大,则可以执行此操作。 int a = 5, b = 6;
long long int aa = a; bb = b;
aa = aa + bb;
b = aa - bb;
a = aa - bb;
对于交换,您可以使用
swap
函数并通过引用传递。即在调用函数中,值在指针中更改,而不是多次复制。
void swap(int *a, int *b){
int temp = *a; //temp is on stack memory. i.e. local variable
*a = *b;
*b = temp;
}
int main(){
int a = 5, b = 7;
swap(&a, &b);
return 0;
}
在
main
中,两个指针也在stack
内存中,但是您可以在交换中传递任何类型的指针,即按引用传递。