日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

21IC電子網(wǎng) | 公眾號(hào)精選

C基礎(chǔ)、經(jīng)典:交換a、b值較好的方法?

嵌入式大雜燴
2020-10-19 15:31
關(guān)鍵字: C語(yǔ)言 嵌入式
收藏

交換a、b的值在C語(yǔ)言的學(xué)習(xí)中是很常見(jiàn)的問(wèn)題。最常用的方法就是引入一個(gè)中間變量當(dāng)做中間介質(zhì)來(lái)交換a、b的值。

代碼如下:

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

????temp?=?*a;
????*a?=?*b;
????*b?=?temp;
}

??!注意不能寫為:

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

????temp?=?a;
????a?=?b;
????b?=?temp;
}

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

如果把指針作為實(shí)參進(jìn)行傳遞,也就是把內(nèi)存地址傳了過(guò)去,那么操作這個(gè)指針?biāo)赶虻膬?nèi)存塊,必然會(huì)改變這個(gè)內(nèi)存的內(nèi)容了。

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

方法一:采用算術(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;
}

方法一存在一個(gè)潛在的危險(xiǎn),當(dāng)形參的類型改為無(wú)符號(hào)16位時(shí),若a、b的值很大,那么a+b的值就有可能超出16位整數(shù)所能表示的范圍,從而造成程序運(yùn)行錯(cuò)誤。方法二則沒(méi)有這個(gè)問(wèn)題,這是一種比較好的方法。

猜你喜歡

C語(yǔ)言、嵌入式重點(diǎn)知識(shí):回調(diào)函數(shù)

C編程實(shí)踐:推箱子游戲


1024G 嵌入式資源大放送!包括但不限于C/C++、單片機(jī)、Linux等。在公眾號(hào)聊天界面回復(fù)1024,即可免費(fèi)獲??!

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!

相關(guān)推薦