[問題] 指標和陣列的問題

看板C_and_CPP作者 (sunlights)時間13年前 (2012/10/04 21:18), 編輯推噓4(408)
留言12則, 9人參與, 最新討論串2/4 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Dev-C++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 無 因為有個問題一直想不通指標就一直學不下去.. 現在想問一下 int a[]={12,5,3}; 有人說a可當成指標.. 所以 *(a+0)=12 *(a+1)=5 *(a+2)=3 而 &a[0]= a+0 = 存放12的位址暫設成xxx &a[1]= a+1 = 存放5的位址暫設成xxx+1 &a[2]= a+2 = 存放3的位址暫設成xxx+2 可是我一直想不通的問題是 a 到底是不是指標 如果是指標的話..它應該是存著指標的變數.. 但通常存指標的變數也有它的位址.. 而a的位址卻剛好和存放陣列的第一個位址相同 那是否也代表&a=a+0=&a[0]??? 那&a+1是否也等於a+1=&a[1]呢?? 我在Dev C 上 執行 發現 &a[1]=a+1 =\= &a+1 為什麼呢?? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.240.39.180

10/04 21:24, , 1F
你發現了一個指標與陣列最大的不同,它們兩個並不相等
10/04 21:24, 1F

10/04 21:25, , 2F
只是很多時候行為相同,但有時還是應該當作不同的東西
10/04 21:25, 2F

10/04 21:26, , 3F
所以不同,像 p+=2 這個在陣列是非法,指標多數合法。
10/04 21:26, 3F

10/04 21:26, , 4F
順便一提,&a[1]= a+sizeof(int)*1=xxx+sizeof(int)*1
10/04 21:26, 4F

10/04 21:30, , 5F
又一個陷入指標地獄的人
10/04 21:30, 5F

10/04 22:23, , 6F
陣列是const pointer,所以無法用a+=2這類修改內容的運算
10/04 22:23, 6F

10/04 22:24, , 7F
陣列不是 pointer......結案![蓋章]
10/04 22:24, 7F

10/04 23:30, , 8F
<~把陣列當作"可以轉成指標的一個大空間特殊型別"
10/04 23:30, 8F

10/05 00:52, , 9F
記得老師說 const pointer
10/05 00:52, 9F

10/05 06:53, , 10F
陣列不是指標,當然也不是 const pointer
10/05 06:53, 10F

10/05 07:01, , 11F
只是 C 標準說在好多情況下都會自動轉型成指標
10/05 07:01, 11F

10/05 08:44, , 12F
指標:哪裡? 陣列:那裡!
10/05 08:44, 12F
文章代碼(AID): #1GROoYYB (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1GROoYYB (C_and_CPP)