2016年1月11日 星期一

Win64 環境下位址算術的陷阱 A+B != A - (-B)

位址算術(address arithmetic/pointer arithmetic)顧名思意就是對某物件的位址進行加減乘除的運算,也就是算術運算子也可以套用在位址變數上進行操作,其目的往往是為了取得物件的部分內容稱為 upcasting,或是從結構中的某一個欄位間接推算其他欄位的頭位址,另外一個常用的目的是為了指向下一個內容物,如圖 1 當一個指向型別 T 的頭位址 p 要跳至下一個物件的頭位址時,只要將頭位址 p 加上指向型別 T 的大小就可以取得下一個物件的頭位址。