[問題] &array

看板C_and_CPP作者 (New CygnusX)時間15年前 (2010/04/30 01:40), 編輯推噓6(607)
留言13則, 5人參與, 最新討論串1/1
以下是我的測試程式: int arr[5]; int *ptr=(int*)&arr; //QQ cout.hex; cout<<"arr="<<arr<<endl; cout<<"&arr="<<&arr<<endl; 問題: 為什麼印出的arr跟&arr是一樣,而且QQ處為什麼可以這樣轉型? 先謝摟 -- 就算是friend 最後還是會有個end 就算要fuck 起初也要有fu 就算是lover 最後還是會over 就算是believe 中間還是有個lie 就算是forget 也曾經有個get -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.240.42.118

04/30 03:47, , 1F
array本身就是指標 <-這對嗎 請強者解釋
04/30 03:47, 1F

04/30 04:21, , 2F
array不等於pointer, 本篇就是很明顯的例子
04/30 04:21, 2F

04/30 04:45, , 3F
array名稱只是很多運算上很像指標 但那只是在compile time
04/30 04:45, 3F

04/30 04:46, , 4F
我們實際上並沒有真的用一個指標的位置去存array開頭
04/30 04:46, 4F

04/30 04:47, , 5F
且array在compile time除了記錄開頭外還有長度等其他資訊
04/30 04:47, 5F

04/30 05:10, , 6F
arr會decay成int* &arr是 int(*)[5] 指向int[5]的指標
04/30 05:10, 6F

04/30 05:10, , 7F
雖然arr和&arr的值一樣 但是type不一樣
04/30 05:10, 7F

04/30 05:11, , 8F
但是,因為它們都是指標 所以可以用C-style強制轉型
04/30 05:11, 8F

04/30 05:11, , 9F
我覺得array會decay成指標這件事應該要列入FAQ了
04/30 05:11, 9F

04/30 05:11, , 10F
每隔一段時間就會有人問一次..
04/30 05:11, 10F

04/30 08:35, , 11F
感謝
04/30 08:35, 11F

04/30 09:15, , 12F
那(int*)&arr有特別用意嗎 還是就跟 arr 效果一樣
04/30 09:15, 12F

04/30 14:16, , 13F
效果一樣
04/30 14:16, 13F
文章代碼(AID): #1BsSI91s (C_and_CPP)