※ 引述《ides (鬼魅)》之銘言:
: 請問一下,“左值” 啥意思啊!看到懂耶!
: void f(int x, int y)
: {
: int j=x=y;
: int* p = &++x; 這個可成立
: int* q = &(x++); 這個不可成立,為啥啊!
: }
左值簡單的說就是可以放在等號左邊的,像變數等等.
因為&後面的必須是左值,所以++x可以,x++不可以.
我剛才試過了 ++x = 4; 是合法的,執行完x仍為4,
x++ = 4; 是會導致編譯錯誤的,所以 ++x可以當左值,x++不行.
至於為什麼會這樣,我也不知道耶...
--
※ Origin: 程式設計樂園 ◆ From: c100.h202052114.is.net.tw
> -------------------------------------------------------------------------- <
作者: threeeyes (星舞絃獨角獸神話憶) 看板: C_and_CPP
標題: Re: 啥是“左值“啊!
時間: Tue Jun 22 16:42:33 1999
※ 引述《Snow.bbs@cszone.cc.ntu.edu.tw (Snow)》之銘言:
: ※ 引述《ides (鬼魅)》之銘言:
: : 請問一下,“左值” 啥意思啊!看到懂耶!
: : void f(int x, int y)
: : {
: : int j=x=y;
: : int* p = &++x; 這個可成立
: : int* q = &(x++); 這個不可成立,為啥啊!
: : }
: 左值簡單的說就是可以放在等號左邊的,像變數等等.
: 因為&後面的必須是左值,所以++x可以,x++不可以.
: 我剛才試過了 ++x = 4; 是合法的,執行完x仍為4,
: x++ = 4; 是會導致編譯錯誤的,所以 ++x可以當左值,x++不行.
: 至於為什麼會這樣,我也不知道耶...
猜測.
因為++x會先執行++的動作,
然後還是給出了x的位址.
不過x++會在=執行以後又要求x的位址...
哎呀, 亂七八糟, 我也講不清楚了.
反正就算講清楚了,
也只是一種解釋罷了.
--
IOI 1998 演算法補習教育密集班
墮落王朝之二朝元老 編號七號 Ddavid
信件Stack位於記憶體位址 chchung@ck.tp.edu.tw, Overflow, 不過麵包stack比較可怕
打斷我Ftp時應該打的電話號碼: 122917122311 (簡單的小編碼, 可是卻比原來還長)
23x23 Puzzle (數字拼盤)強力運作中
我...我錯了!!失誤到只剩銅牌, 嗚嗚嗚嗚...
--
※ 發信站: 批踢踢實業坊(ptt.twbbs.org)
◆ From: cs7po10.ht.ficn
> -------------------------------------------------------------------------- <
作者: hotball (哲哲魚) 看板: C_and_CPP
標題: Re: 啥是“左值“啊!
時間: Tue Jun 22 23:40:54 1999
※ 引述《threeeyes (星舞絃獨角獸神話憶)》之銘言:
: ※ 引述《Snow.bbs@cszone.cc.ntu.edu.tw (Snow)》之銘言:
: : 左值簡單的說就是可以放在等號左邊的,像變數等等.
: : 因為&後面的必須是左值,所以++x可以,x++不可以.
: : 我剛才試過了 ++x = 4; 是合法的,執行完x仍為4,
: : x++ = 4; 是會導致編譯錯誤的,所以 ++x可以當左值,x++不行.
: : 至於為什麼會這樣,我也不知道耶...
: 猜測.
: 因為++x會先執行++的動作,
: 然後還是給出了x的位址.
: 不過x++會在=執行以後又要求x的位址...
: 哎呀, 亂七八糟, 我也講不清楚了.
: 反正就算講清楚了,
: 也只是一種解釋罷了.
因為 ++x 是在 x 加一之後傳回加一之後的值,所以它可以是一個左值
(變數是存在的)。
但是 x++ 是在加一之後,傳回 x 原來的值(加一之前的),所以它需要一個暫時變
數來存 x 原來的值,而暫時變數不能成一個左值。
--
※ 發信站: 批踢踢實業坊(ptt.twbbs.org)
◆ From: ntucst.csie.ntu