0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

C基礎:交換a、b值較好的方法?

工程師 ? 來源:嵌入式大雜燴 ? 作者:嵌入式大雜燴 ? 2020-10-16 11:18 ? 次閱讀

交換a、b的值在C語言的學習中是很常見的問題。最常用的方法就是引入一個中間變量當做中間介質(zhì)來交換a、b的值。

代碼如下:

void change_ab(int *a, int *b){ int temp = 0; temp = *a; *a = *b; *b = temp;}

?。∽⒁獠荒軐憺椋?/p>

void change_ab(int a, int b){ int temp = 0; temp = a; a = b; b = temp;}

普通的變量傳遞,則不會改變內(nèi)存內(nèi)容,以為普通變量作為參數(shù)時,其實是在內(nèi)存塊(??臻g)中新申請了一塊空閑塊,不是原來的內(nèi)存塊,而函數(shù)調(diào)用完畢之后,這塊新申請的內(nèi)存塊會由于變量的作用域失效而被系統(tǒng)回收。

如果把指針作為實參進行傳遞,也就是把內(nèi)存地址傳了過去,那么操作這個指針所指向的內(nèi)存塊,必然會改變這個內(nèi)存的內(nèi)容了。

以上這種方法就是最常見的方法。那么,你知道如何將a、b的值進行交換,并且不使用任何其他的中間變量?

方法一:采用算術(shù)的方法

void change_ab(int *a, int *b){ *a = *a + *b; *b = *a - *b; *a = *a - *b;}

方法二:采用異或的方法

void change_ab(int *a, int *b){ *a = *a ^ *b; *b = *a ^ *b; *a = *a ^ *b;}

方法一存在一個潛在的危險,當形參的類型改為無符號16位時,若a、b的值很大,那么a+b的值就有可能超出16位整數(shù)所能表示的范圍,從而造成程序運行錯誤。方法二則沒有這個問題,這是一種比較好的方法。

責任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7575

    瀏覽量

    134166
  • 編程
    +關注

    關注

    88

    文章

    3521

    瀏覽量

    93276
收藏 人收藏

    評論

    相關推薦

    MHMF041A1C4-MINAS A6B 系列 (EtherCAT) 標準規(guī)格書 松下

    電子發(fā)燒友網(wǎng)為你提供Panasonic(Panasonic)MHMF041A1C4-MINAS A6B 系列 (EtherCAT) 標準規(guī)格書相關產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有
    發(fā)表于 09-03 19:15
    MHMF041<b class='flag-5'>A1C</b>4-MINAS <b class='flag-5'>A6B</b> 系列 (EtherCAT)  標準規(guī)格書 松下

    MHMF041A1C2-MINAS A6B 系列 (EtherCAT) 標準規(guī)格書 松下

    電子發(fā)燒友網(wǎng)為你提供Panasonic(Panasonic)MHMF041A1C2-MINAS A6B 系列 (EtherCAT) 標準規(guī)格書相關產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有
    發(fā)表于 09-03 18:58
    MHMF041<b class='flag-5'>A1C</b>2-MINAS <b class='flag-5'>A6B</b> 系列 (EtherCAT)  標準規(guī)格書 松下

    MHMF022A1C4-MINAS A6B 系列 (EtherCAT) 標準規(guī)格書 松下

    電子發(fā)燒友網(wǎng)為你提供Panasonic(Panasonic)MHMF022A1C4-MINAS A6B 系列 (EtherCAT) 標準規(guī)格書相關產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有
    發(fā)表于 08-02 18:51
    MHMF022<b class='flag-5'>A1C</b>4-MINAS <b class='flag-5'>A6B</b> 系列 (EtherCAT)  標準規(guī)格書 松下

    MHMF022A1C2-MINAS A6B 系列 (EtherCAT) 標準規(guī)格書 松下

    電子發(fā)燒友網(wǎng)為你提供Panasonic(Panasonic)MHMF022A1C2-MINAS A6B 系列 (EtherCAT) 標準規(guī)格書相關產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有
    發(fā)表于 08-02 18:36
    MHMF022<b class='flag-5'>A1C</b>2-MINAS <b class='flag-5'>A6B</b> 系列 (EtherCAT)  標準規(guī)格書 松下

    MHMF021A1C4-MINAS A6B 系列 (EtherCAT) 標準規(guī)格書 松下

    電子發(fā)燒友網(wǎng)為你提供Panasonic(Panasonic)MHMF021A1C4-MINAS A6B 系列 (EtherCAT) 標準規(guī)格書相關產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有
    發(fā)表于 07-11 18:46
    MHMF021<b class='flag-5'>A1C</b>4-MINAS <b class='flag-5'>A6B</b> 系列 (EtherCAT)  標準規(guī)格書 松下

    MHMF021A1C2-MINAS A6B 系列 (EtherCAT) 標準規(guī)格書 松下

    電子發(fā)燒友網(wǎng)為你提供Panasonic(Panasonic)MHMF021A1C2-MINAS A6B 系列 (EtherCAT) 標準規(guī)格書相關產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有
    發(fā)表于 07-10 19:27
    MHMF021<b class='flag-5'>A1C</b>2-MINAS <b class='flag-5'>A6B</b> 系列 (EtherCAT)  標準規(guī)格書 松下

    MHMF012A1C2-MINAS A6B 系列 (EtherCAT) 標準規(guī)格書 松下

    電子發(fā)燒友網(wǎng)為你提供Panasonic(Panasonic)MHMF012A1C2-MINAS A6B 系列 (EtherCAT) 標準規(guī)格書相關產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有
    發(fā)表于 06-27 18:33
    MHMF012<b class='flag-5'>A1C</b>2-MINAS <b class='flag-5'>A6B</b> 系列 (EtherCAT)  標準規(guī)格書 松下

    高壓柵極驅(qū)動器LM5100A/B/C LM5101A/B/C數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《高壓柵極驅(qū)動器LM5100A/B/C LM5101A/B/C數(shù)據(jù)表.pdf》
    發(fā)表于 03-29 10:36 ?0次下載
    高壓柵極驅(qū)動器LM5100<b class='flag-5'>A</b>/<b class='flag-5'>B</b>/<b class='flag-5'>C</b> LM5101<b class='flag-5'>A</b>/<b class='flag-5'>B</b>/<b class='flag-5'>C</b>數(shù)據(jù)表

    FLUKE 192B - 196B/C - 199B/C用戶手冊

    FLUKE 192B - 196B/C - 199B/C 用戶手冊
    發(fā)表于 03-19 10:59 ?3次下載

    C語言的短路現(xiàn)象

    a || b || c 只要a為真(非0)就不必判斷bc;只有
    的頭像 發(fā)表于 12-07 12:20 ?522次閱讀
    <b class='flag-5'>C</b>語言的短路現(xiàn)象

    python中如何交換兩個數(shù)的相加

    應用進行詳細解析。 一、變量交換原理解析 傳統(tǒng)方式 在Python中,交換兩個數(shù)的通??梢允褂靡粋€臨時變量進行操作。假設有變量ab,要實
    的頭像 發(fā)表于 11-29 17:29 ?538次閱讀

    python中input怎么輸入3個

    整數(shù): " ))c = int ( input ( "請輸入第三個整數(shù): " )) 這段代碼會提示用戶分別輸入三個整數(shù),并將這些存儲到變量 a , b , 和
    的頭像 發(fā)表于 11-23 15:31 ?6705次閱讀

    python編程交換ab

    交換ab是編程中的一個基礎操作。在Python中,有多種方法可以實現(xiàn)這個任務。本文將詳細介紹幾種常見的
    的頭像 發(fā)表于 11-22 10:58 ?4694次閱讀

    python中如何交換兩個數(shù)的位置

    。具體步驟如下所示: 定義兩個變量,分別存儲兩個需要交換位置的數(shù)。 使用一個臨時變量來保存其中一個數(shù)的。 將第二個數(shù)的賦給第一個變量。 將臨時變量的賦給第二個變量。
    的頭像 發(fā)表于 11-22 10:56 ?2099次閱讀

    電位器A型、B型、C型是什么意思?

    A型、B型和C型是指電位器的不同結(jié)構(gòu)類型,它們主要用于表示電位器的外觀和尺寸形狀。
    的頭像 發(fā)表于 11-14 09:17 ?3672次閱讀