c语言 异或_C语言经典例题来袭!5大方法告诉你答案
各位,今天我們來看一個C語言的經典例題,因為最近有不少人后臺問的問題都跟這個或多或少有點關系,所以今天咱們拿出來對這類問題進行一個總結,話不多說,就問下面的代碼會輸出什么?
#include意圖很明顯,要用swap函數中交換main函數中的a和b的值,但是很明顯上述代碼是達不到要求的,a和b的值沒有發生改變。其實本題就是C中比較有名傳址和傳值的典型例子,而實現交換main函數中的兩個變量的值,需要把兩個變量的地址傳給swap函數,而不是把兩個變量的值傳過去,也就是要改成如下代碼:
#include至于原因我想大家應該都能理解了,我們不再展開,上面這個例子也是面試經常會考察的點,希望大家熟記。
關注微信公眾號:C程序編程 免費獲取進階指導和學習資料!由點及面是一種重要且有效的學習方法,所以我們想通過本例對C中交換兩變量值的知識進行一些總結,方便大家的學習。其實交換兩變量的值從大的方向可以分為兩類(嚴格來說下面講的第一類也屬于第二類,我們姑且這么劃分),一類是函數外交換,也就是本例采用swap函數交換main函數中兩變量值的方法,這里容易出錯的點無非就是址和值的問題,不再贅述。
另一類是函數內交換,也就是不通過其他函數,在本函數內完成,這種方法比較多,在前面的推送中也講過,我總結了下面5種(名稱都為我自取):
1.臨時變量法
方法解釋:采用臨時變量的方法,作為中間過渡,這是最簡單也是大家最容易想到的方法,此法在各種場合應用極多,應該熟練掌握。
#include2.加減交換法
方法解釋:顧名思義,使用數學中的加減法進行交換,先把a+b的結果暫時先保存在變量a中,然后通過這改變后的a和原始的b進行減法就可以得到交換后的b,缺點是a+b的結果可能越界。
#include3.異或交換法
方法解釋:巧妙使用異或運算來進行交換,這種方法主要利用了異或的特性a^b的值先保存到a,因為a^b^b=a所以可以順利完成交換,這種方法是很完美的,不存在越界的問題。
#include4.移位交換法
方法解釋:這種方法不太常用,原理是把原來的int類型的a的值拆分成高16位和低16位,相當于多了16位的暫存空間可以周轉,缺點是如果a或者b超過了16位,這種方法就會出錯,此方法較復雜且容易出錯,因此不建議大家使用。
#include看到這里,大家應該明白了為什么我在一開始括號中講“第一類嚴格說也屬于第二類了吧”,因為就算你在函數外交換,但交換的那個函數依然會用到上面5種方法之一,為了大家好理解,我們才暫且這么劃分的。
好了,就講到這里吧,希望通過上述文章讓大家對交換兩變量值有重新的認識,感謝各位的耐心閱讀!
關注微信公眾號:C程序編程 免費獲取進階指導和學習資料!
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的c语言 异或_C语言经典例题来袭!5大方法告诉你答案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jquery实现登录失败提示_浅谈jQu
- 下一篇: c 普通的文本变成注释文本的快捷键_In