[問題] 小小問題無解 (if問題)

看板C_and_CPP (C/C++)作者 (Light)時間13年前 (2012/08/22 17:58), 編輯推噓2(207)
留言9則, 5人參與, 最新討論串1/1
小弟剛學c語言,有個小問題 int x=0; if (x=1) printf("%d",x); else printf("%d",x); 為什麼會出現印出會是 1 1 因為一開始沒看清楚以為是if (x == 1) 但是不瞭解這行if(x=1) 為什麼x就會載入1呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.168.174.184

08/22 18:17, , 1F
x=1在任何地方都是x=1 不因為在if()裡面就自動變成x==1
08/22 18:17, 1F

08/22 18:18, , 2F
x=k執行時會傳回那個k 只要k不為0 if()就視為成立
08/22 18:18, 2F

08/22 19:01, , 3F
= 是指定符號 == 是等號 兩者不同 你把1指定到變數x
08/22 19:01, 3F

08/22 19:04, , 4F
而且else是多餘的 因為你的 expression 一直都是true = =
08/22 19:04, 4F

08/22 19:08, , 5F
如果是x=0,那才會執行到else
08/22 19:08, 5F

08/22 23:29, , 6F
=是指定 由右到左 所以先把x指定為1 再把x丟到if的判斷裡
08/22 23:29, 6F

08/22 23:29, , 7F
所以等價於 if(1)
08/22 23:29, 7F

08/22 23:51, , 8F
嚴格來講,應該說x=1的表達式本身之值會等於左邊的運算元
08/22 23:51, 8F

08/22 23:54, , 9F
不過該值必須是指定後所得的結果
08/22 23:54, 9F
文章代碼(AID): #1GDArTJ7 (C_and_CPP)
文章代碼(AID): #1GDArTJ7 (C_and_CPP)