看板 C_and_CPP 關於我們 聯絡資訊
問題(Question): 小弟看到下面程式碼 int *ptr; ptr=(int *)0x5678; 查詢網路資料是說明上面程式碼表示 ptr此指標指向位址0x5678 不太明白為什上述程式碼能做到,指標不是就指向某變數的位址嗎(&var) 但0x5678也不是變數,謝謝大家 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.118.211.203 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1416383097.A.7C2.html
ichleibeqbi: 簡單理解指標 就是一個存位址的變數 11/19 16:51
ichleibeqbi: 不限定一定要是變數位址 也可以是記憶體的某個位址 11/19 16:52
ftpui: 那如果把0x5678當位址就直接放進去ptr 11/19 16:53
ichleibeqbi: 但直接指定位址很危險 因為很可能操作在不合法的位址 11/19 16:53
ftpui: 為何還要轉型成指標型態 謝謝 11/19 16:54
ichleibeqbi: 除非你很確定你做的事 或是寫比較低端的程式才會用 11/19 16:54
ftpui: 轉型是轉成合法位址嗎??? > < 11/19 16:55
ichleibeqbi: 告訴compiler 0x5678是一個int type的位址 11/19 16:56
ichleibeqbi: 位址合不合法要看你的應用 11/19 16:57
ichleibeqbi: 記憶體運作可以去看一些OS相關的書 裡面講得比我清楚 11/19 16:59
ftpui: 可是(int *)0x5678 不是把0x5678轉成int型態的指標嗎??? 11/19 17:01
ftpui: 還是我理解錯誤 > < 11/19 17:01
dirkc: 轉型是為了等號左邊,例如:double ptr;ptr=(double)0x5678; 11/19 17:05
dirkc: "ptr此指標指向位址0x5678" 這句話是錯的 11/19 17:09
ichleibeqbi: 應該如何解釋 求教 11/19 17:14
nctucch17170: 你可以print &ptr *ptr 看看 在想想 11/19 17:35
dirkc: 回一樓:通常說指標p指向物件a,意指對p做dereference後等於a 11/19 18:14
dirkc: 也就是*p等於a; 從原po程式碼來看並非如此囉 11/19 18:14
ichleibeqbi: 指標實際上不就是指向某個位址 11/20 01:22
ichleibeqbi: 無關dereference吧 11/20 01:24
ichleibeqbi: ptr指向位址0x5678, 而*ptr則是位址0x5678的值 11/20 09:29
dirkc: 這樣解釋也可以啦,只不過就會變成"指標p指向物件a"和"指標p 11/20 10:23
dirkc: 指向物件a的位址"這兩句話都對;我原意是想區分一下兩者差異 11/20 10:24
dirkc: 我想區分原po的和int *addr=(int*)0x5678;int **ptr=&addr; 11/20 10:27
Killercat: 指標轉型 基本上都是「怎麼解釋這個指標」 11/21 01:34
Killercat: 這指標要拿多長來解釋?裡面的東西要怎麼翻譯? 11/21 01:35
Killercat: 像是編譯器看到char*就知道 這指標要一路往後拿到第一 11/21 01:36
Killercat: 個\0為止,看到int*就知道一共要拿4bytes做endian 11/21 01:36
Jotarun: 這是dsp的code? 11/21 12:59