看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《okwan (okwan)》之銘言: : : reference得限制比指標多不像指標彈性那麼大~~~ : : 他是很專情的指到哪個人就不能換了~~~ : : 指標的話是可以亂指的~~~喜歡哪個人就指它~~ : : 它比指標單純沒指標那麼複雜~~ : : 應該就是這樣@@"~~~ : 對不起,這樣的解釋有一些不清楚. : C++裡的指標與Reference是完全不一樣的東西. : Reference沒有指向誰的問題,因為它只是一個變數的"別名".指標才有"指"到某一個位置. 你們的意思應該是一樣的吧 在同一個 scope 中 reference 的確就是個別名 但 reference 本身的確是用 pointer 來實作的 以這個例子來說 void foo(const string& str) { // ... } void bar() { foo("hello world"); } 這是合法的 但在 foo 裡面 宣告為 refernece 的 str 是誰的別名呢? 事實上這邊 compiler 會在呼叫 foo() 的地方產生一個 string 暫時變數 然後讓 str 成為暫時變數的別名 不過這個暫時變數本來就沒有名字了 用「別名」反而很奇怪 倒不如說 str 指向一個暫時變數 而你在使用 str 時 compiler 會自動幫你 dereference 實際上 bar() 在呼叫 foo() 時 的確是把暫時變數的位址傳給 foo() 甚至如果你霸王硬上弓 也可以讓 reference 指向 NULL: string& str = *(string*)NULL; 當然這麼做一點好處也沒有 我只是在說明 reference 其實本身就是 pointer 只是使用的語法不同罷了 : 一堆人的履歷都寫會C++, 我每次都問應徵者CALL BY VALUE, CALL BY ADDRESS, : 與CALL BY REFERENCE是怎麼運作, 結果有七成的人都講不出來. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.62.3.35
pikachu123:關於reference是不是指標的問題~~~ 05/03 20:00
pikachu123:看本是說A reference is an implicit pointer that is 05/03 20:00
pikachu123:automatically deference~照課本說他應該是pointer 05/03 20:01
pikachu123:但是跟pointer又不一樣~okwan大大跟我說reference 05/03 20:04
pikachu123:沒有指向誰的問題~跟課本講得矛盾到~這讓我很困惑~~ 05/03 20:07
littleshan:我會比較贊同課本的說法 05/03 23:52
okwan:但是課本也會提醒,reference不可以當成pointer來使用 05/04 08:34