• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            MyMSDN

            MyMSDN記錄開發新知道

            a Swap program

            #include "stdio.h"
            #include "stdlib.h"
            
            void foo(int *a, int *b) {
                *a = *a + *b;
                *b = *a - *b;
                *a = *a - *b;
            }
            int main(void) {
                int a = 1, b = 2, c = 3;
                foo(&a, &b);
                foo(&b, &c);
                foo(&c, &a);
                printf("%d, %d, %d", a, b, c);
                return EXIT_SUCCESS;
            }

            foo看似繚亂卻是一個交換函數:

            從最后一次做*a和*b的位置開始向上:

            也就是*b = *a - *b;擴展為*b = (*a + *b) - *b展開就是*b = *a;也就是將*a的值賦給了*b。(注意到在此之前*b從未改變過)

            *a = *a - *b(這時候不能用上一行的結論,因為*a曾經改變過了)擴展為*a = (*a + *b) – *a 也就是*a = *b,這里*b是指原始的*b,而不是上一行的結論,至此就交換完畢。

            可以注意到,這里并沒有使用臨時變量。所以這是一個不需要臨時變量的交換方法。不過這種方法只支持支持operator+和operator-的數值計算(基本上只能用在整數上,因為對浮點的操作可能涉及到舍入的問題)

            而且這個方法還有一個缺陷,就是對數值邊界的判斷,比入MAX_INT+MAX_INT就溢出了,所以它存在一定的局限性。

            posted on 2009-02-24 18:29 volnet 閱讀(273) 評論(0)  編輯 收藏 引用 所屬分類: C/C++

            特殊功能
             
            久久精品一区二区国产| 欧美大香线蕉线伊人久久| 久久亚洲国产欧洲精品一 | 久久精品国产欧美日韩99热| 久久天天躁狠狠躁夜夜2020一| 久久亚洲中文字幕精品有坂深雪 | 久久精品免费大片国产大片| 日本精品久久久久久久久免费| 一本一本久久a久久综合精品蜜桃| av午夜福利一片免费看久久| 狠狠色综合网站久久久久久久 | 久久91精品国产91久久户| 欧美日韩精品久久久免费观看| 久久精品aⅴ无码中文字字幕不卡 久久精品aⅴ无码中文字字幕重口 | 国产免费久久精品丫丫| 一本色道久久99一综合| 久久99精品久久久久久噜噜 | 国产人久久人人人人爽| 热久久最新网站获取| 伊人久久免费视频| 成人国内精品久久久久一区| 色老头网站久久网| 亚洲精品视频久久久| 国产精品成人精品久久久| 99久久久精品免费观看国产| 伊人久久大香线蕉av不卡| 午夜视频久久久久一区 | 国产成人精品久久一区二区三区av | 亚洲伊人久久大香线蕉苏妲己| 精品无码久久久久国产动漫3d| 久久影院午夜理论片无码 | 伊人久久大香线焦AV综合影院 | 久久超碰97人人做人人爱| 久久亚洲熟女cc98cm| 久久人人爽人人人人爽AV| 2021最新久久久视精品爱| 久久久无码精品亚洲日韩蜜臀浪潮 | 久久播电影网| 人妻无码久久精品| 精产国品久久一二三产区区别| 久久99精品久久久大学生|