看不懂
本帖最后由 如果孤独感 于 2020-4-11 17:08 编辑3. 通常我们交换两个变量的值需要使用到一个临时变量,代码如下:
……
temp = a;
a = b;
b = temp;
……
复制代码
小明童鞋说其实大可不必使用临时变量,他这么写:
……
a += b;
b = a - b;
a -= b;
……
复制代码
请问小明的办法可行吗?
答:在大部分情况下,小明的方案是奏效的。不过有一种情况需要担心,就是在颠倒同一个变量时,这个代码是无法正常运行的。
比如:版权属于:
……
#define SWAP(a, b) (a += b, b = a - b, a -= b)
……
int array = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int i, j;
……
SWAP(array, array);// 当 i == j 时,触发 Bug
……
提问
为什么就bug了 ???
你的问题是? qiuyouzhi 发表于 2020-4-11 15:56
???
你的问题是?
为什么就bug了
本帖最后由 Cool_Breeze 于 2020-4-11 20:22 编辑
#include <stdio.h>
#define SWAP(a,b) (a+=b, b=a-b, a-=b)
int main(void)
{
int a=2;
int c=3;
//SWAP(a,a);
a+=a;
a=a-a;
a-=a;
printf("%d %d",a,c);
return 0;
}
i = j
array = array 地址是同一个 Cool_Breeze 发表于 2020-4-11 20:16
i = j
array = array 地址是同一个
话说i是什么,没说啊
如果孤独感 发表于 2020-4-11 21:00
话说i是什么,没说啊
i=1,j=1;
i=j;
array=array=array; Cool_Breeze 发表于 2020-4-11 21:06
既然地址同一个,值不是相同,同样可以么??
页:
[1]