※ 引述《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)