看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《QQ29 (我愛阿蓉)》之銘言: : → QQ29:@@ 我是不懂算offset的意義 因為我沒這樣用過 02/05 10:13 : → QQ29:不過就感覺 大減小 出來的 和 小減大 出來的不一樣 02/05 10:13 : → QQ29:就覺得很奇怪 對算offset就更不懂用意了 02/05 10:14 我已經說過了, 你自己胡亂assign兩個數給指標.... 然後期望指標相減可以減出什麼有意義的結果來Orz 指標內容相減的offset, 相當指標基底型態數量.... 指標加上offset, 相當跳過基底型態數量的address char raw[1024]; char *pChar = (char*)raw, *pChar2 = (char*)&raw[512]; short *pShort = (short*)raw, *pShort2 = (short*)&raw[512]; int *pInt = (int*)raw, *pInt2 = (int*)&raw[512]; double *pDouble = (double*)raw, *pDouble2 = (double*)&raw[512]; printf("%p\n", raw); 試著去印 pChar ~ pDouble 都 +10 的結果看看.... 再試著印 pChar2-pChar ~ pDouble2-pDouble 看.... 那個 10 或是 指標相減的結果 就是說的offset.... 個人習慣, 不確定C/C++裡有沒有更正式的名詞定義@@ : 推 LPH66:你要想成這裡 compiler 幫你補了一個除法 02/05 11:33 : → LPH66:int x=0x5566,y=0x5570; printf("%d %d",(x-y)/4,(y-x)/4); 02/05 11:34 : → LPH66:大概像是這種感覺 所以那個差別就是除法的捨去誤差了 02/05 11:34 : → LPH66:也就是這裡的減不單單只有減還有除 偏偏問題正好在除上 02/05 11:35 : → ksmrt0123:C的指標跟array是一體兩面, 這個要用array想 02/05 11:40 : → ksmrt0123:指標減指標就是求差幾個element 02/05 11:41 概念與計算(誤差來源)就像上面兩位大大推文所說.... 至於什麼時候用, 只能說, 等有需要用自然就知道了XD &raw[512], 把512改成差1 ~ 差8的數來玩玩看.... 指標相減的的前後順序, 也可以對調來玩玩看.... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.134.41.4 ※ 編輯: VictorTom 來自: 220.134.41.4 (02/05 13:11)