考虑到内存管理,如何交换两个变量的值?

问题描述 投票:0回答:2

我想交换两个变量的值。这是我尝试过的:
方法一:

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;

有没有什么有效的方法来解决这个交换问题并考虑内存管理?

c memory-management dynamic-memory-allocation
2个回答
0
投票
  1. 方法 1 - 好的
  2. 方法 2 - 不行 你的第二种方法是完全错误的并且调用了未定义的行为。您将 int 值转换为指向
    int
    的指针分配给
    指针
    。然后你做相反的转换。
    int a = 5, b = 6;
    int *p = a;  //!!!wrong and compiler will warn you!!!!
    
    a = b;
    b = p;
  1. 方法 3 - 很危险,因为您可能会溢出
    int
    值。如果您的中间值尺寸较大,则可以执行此操作。
    int a = 5, b = 6;
    long long int aa = a; bb = b;

    aa = aa + bb;
    b = aa - bb;
    a = aa - bb;

-1
投票

对于交换,您可以使用

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
内存中,但是您可以在交换中传递任何类型的指针,即按引用传递。

© www.soinside.com 2019 - 2024. All rights reserved.