[問題] &ptr 與 &(++ptr)

看板C_and_CPP作者 (\冏/)時間13年前 (2011/01/17 19:56), 編輯推噓3(3012)
留言15則, 6人參與, 最新討論串1/1
int num [] = {1,2,3,4}; int *ptr = num; cout << &ptr << endl; cout << &(++ptr); //cout << &(ptr++); /* 不合法,為什麼?! ERROR: &需一個 l-value */ 輸出結果: 0x23ff2c 0x23ff2c 不曉得結果為何會是這樣,使用 &ptr 應該是取到指標變數所在的位址 我知道如果使用 *(++ptr) 會得到 num[2]=2 這個結果。 那 &(++ptr) 又是什麼東西 @@? 迷糊了... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 124.8.144.198 ※ 編輯: homal 來自: 124.8.144.198 (01/17 20:00)

01/17 20:01, , 1F
ptr++的語意是 回傳一個暫時變數=ptr 然然後ptr 往前走
01/17 20:01, 1F

01/17 20:01, , 2F
所以那句代表你想要去取一個暫時變數的 address ...
01/17 20:01, 2F

01/17 20:03, , 3F
相信你應該不知道什麼是lvalue, 弄懂你就知道原因了
01/17 20:03, 3F

01/17 20:03, , 4F
l-vale 是一個 address, r-value 是一個值
01/17 20:03, 4F

01/17 20:04, , 5F
哦 akasan 兄的解說,我懂了,你說到關鍵字 "暫時變數"
01/17 20:04, 5F

01/17 20:05, , 6F
如果是暫時變數,跟本就沒辦法去取 "address"
01/17 20:05, 6F

01/17 20:15, , 7F
你對L/R value的認知有誤
01/17 20:15, 7F

01/17 20:18, , 8F
真假@@" 能否指教 l/r value 的意思
01/17 20:18, 8F

01/17 20:30, , 9F
請看 8040 篇 yoco 大寫得很詳細
01/17 20:30, 9F

01/18 02:39, , 10F
QQ寫那麼久的C從沒想過原PO的問題= =
01/18 02:39, 10F

01/18 02:41, , 11F
我也想不通&(++ptr),到底什麼時候要使用的呢??
01/18 02:41, 11F

01/18 14:15, , 12F
其實我是在惡搞...所以好像沒人用 &(++ptr) 這種東西
01/18 14:15, 12F

01/20 03:08, , 13F
++ptr是加ptr的value, ptr的address不會變啊
01/20 03:08, 13F

01/20 03:10, , 14F
int i=0; &(++i) 跟 &i 出來會一樣,你如果這個能懂
01/20 03:10, 14F

01/20 03:10, , 15F
那int* 也是一樣道理
01/20 03:10, 15F
文章代碼(AID): #1DD2vpYC (C_and_CPP)