• <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記錄開發(fā)新知道

            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看似繚亂卻是一個交換函數(shù):

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

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

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

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

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

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

            特殊功能
             
            亚洲欧美精品伊人久久| 国产精品青草久久久久福利99| 久久亚洲中文字幕精品一区| 四虎亚洲国产成人久久精品| 色狠狠久久AV五月综合| 日本免费久久久久久久网站| 少妇被又大又粗又爽毛片久久黑人| 久久精品亚洲AV久久久无码| 亚洲国产精品久久久久婷婷老年| 亚洲日韩欧美一区久久久久我| 久久亚洲精品成人AV| 久久久久亚洲?V成人无码| 日韩乱码人妻无码中文字幕久久| 91精品国产高清久久久久久91| 婷婷久久综合九色综合九七| 国产69精品久久久久777| 久久精品国产亚洲AV不卡| 91精品国产高清久久久久久国产嫩草 | 亚洲伊人久久综合影院| 久久国产乱子伦精品免费强| 久久天天躁狠狠躁夜夜2020一| 久久国产精品二国产精品| 久久w5ww成w人免费| 亚洲中文字幕久久精品无码APP| 久久av高潮av无码av喷吹| 99久久精品日本一区二区免费| 精品久久久无码人妻中文字幕| 久久婷婷五月综合成人D啪| 国产激情久久久久影院| 国产成人久久激情91| 久久男人Av资源网站无码软件| 伊人久久大香线蕉av一区| 日产精品久久久久久久| 久久久久国产一级毛片高清板| 亚洲伊人久久大香线蕉苏妲己| 狠狠色丁香久久综合五月| 精品久久久噜噜噜久久久| 97超级碰碰碰久久久久| 久久青青草原国产精品免费| 99久久国产免费福利| 久久国产高清一区二区三区|