PTT
Submit
Submit
選擇語言
正體中文
简体中文
PTT
C_and_CPP
[問題] 指標(存取特定記憶體位址)
作者:
ftpui
(rei)
2014-11-19 15:44:54
問題(Question):
小弟看到下面程式碼
int *ptr;
ptr=(int *)0x5678;
查詢網路資料是說明上面程式碼表示
ptr此指標指向位址0x5678
不太明白為什上述程式碼能做到,指標不是就指向某變數的位址嗎(&var)
但0x5678也不是變數,謝謝大家
作者:
ichleibeqbi
(positive)
2014-11-19 16:51:00
簡單理解指標 就是一個存位址的變數不限定一定要是變數位址 也可以是記憶體的某個位址
作者:
ftpui
(rei)
2014-11-19 16:53:00
那如果把0x5678當位址就直接放進去ptr
作者:
ichleibeqbi
(positive)
2014-11-19 16:53:00
但直接指定位址很危險 因為很可能操作在不合法的位址
作者:
ftpui
(rei)
2014-11-19 16:54:00
為何還要轉型成指標型態 謝謝
作者:
ichleibeqbi
(positive)
2014-11-19 16:54:00
除非你很確定你做的事 或是寫比較低端的程式才會用
作者:
ftpui
(rei)
2014-11-19 16:55:00
轉型是轉成合法位址嗎??? > <
作者:
ichleibeqbi
(positive)
2014-11-19 16:56:00
告訴compiler 0x5678是一個int type的位址位址合不合法要看你的應用記憶體運作可以去看一些OS相關的書 裡面講得比我清楚
作者:
ftpui
(rei)
2014-11-19 17:01:00
可是(int *)0x5678 不是把0x5678轉成int型態的指標嗎???還是我理解錯誤 > <
作者:
dirkc
(3781615)
2014-11-19 17:05:00
轉型是為了等號左邊,例如:double ptr;ptr=(double)0x5678;"ptr此指標指向位址0x5678" 這句話是錯的
作者:
ichleibeqbi
(positive)
2014-11-19 17:14:00
應該如何解釋 求教
作者:
nctucch17170
(kkadam)
2014-11-19 17:35:00
你可以print &ptr *ptr 看看 在想想
作者:
dirkc
(3781615)
2014-11-19 18:14:00
回一樓:通常說指標p指向物件a,意指對p做dereference後等於a也就是*p等於a; 從原po程式碼來看並非如此囉
作者:
ichleibeqbi
(positive)
2014-11-20 01:22:00
指標實際上不就是指向某個位址無關dereference吧ptr指向位址0x5678, 而*ptr則是位址0x5678的值
作者:
dirkc
(3781615)
2014-11-20 10:23:00
這樣解釋也可以啦,只不過就會變成"指標p指向物件a"和"指標p指向物件a的位址"這兩句話都對;我原意是想區分一下兩者差異我想區分原po的和int *addr=(int*)0x5678;int **ptr=&addr;
作者:
Killercat
(殺人貓™)
2014-11-21 01:34:00
指標轉型 基本上都是「怎麼解釋這個指標」這指標要拿多長來解釋?裡面的東西要怎麼翻譯?像是編譯器看到char*就知道 這指標要一路往後拿到第一個\0為止,看到int*就知道一共要拿4bytes做endian
作者:
Jotarun
(forever)
2014-11-21 12:59:00
這是dsp的code?
繼續閱讀
[問題] 二維陣列與雙重指標關係
ipod7788
Re: [問題] scanf()問題
anoymouse
[問題] scanf()問題
anoymouse
[問題] opencv遺失CVHARRTRAINING.DLL
jkowaur
[問題] 組合語言請求解釋
adam77x
Re: [理工] 程式語言觀念
littleshan
Re: [理工] 程式語言觀念
ando5566
Re: [理工] 程式語言觀念
bachelorwhc
Fw: [理工] 程式語言觀念
gauss760220
[問題] THX
laputaca
Links
booklink
Contact Us: admin [ a t ] ucptt.com