鱼C论坛

 找回密码
 立即注册
查看: 865|回复: 6

[已解决]看不懂

[复制链接]
发表于 2020-4-11 15:54:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 如果孤独感 于 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[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int i, j;
……
SWAP(array[i], array[j]);  // 当 i == j 时,触发 Bug
……


提问
为什么就bug了
最佳答案
2020-4-11 20:16:37
本帖最后由 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[i] = array[j] 地址是同一个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-11 15:56:52 | 显示全部楼层
???
你的问题是?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-11 17:08:57 | 显示全部楼层
qiuyouzhi 发表于 2020-4-11 15:56
???
你的问题是?

为什么就bug了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-11 20:16:37 | 显示全部楼层    本楼为最佳答案   
本帖最后由 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[i] = array[j] 地址是同一个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-11 21:00:08 | 显示全部楼层
Cool_Breeze 发表于 2020-4-11 20:16
i = j
array = array[j] 地址是同一个

话说i是什么,没说啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-11 21:06:53 | 显示全部楼层
如果孤独感 发表于 2020-4-11 21:00
话说i是什么,没说啊

i=1,j=1;
i=j;
array[i]=array[j]=array[1];
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-12 08:29:43 | 显示全部楼层

既然地址同一个,值不是相同,同样可以么??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-18 12:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表