#1
|
||||
|
||||
C語言中指標位址增加的問題
有一個範例是表現出不同型的指標當其增加一個單位時,因型態不同而增加不同位元數。
如下: #include <stdio.h> int main(void) { char *cp,ch; int *ip,i; float *fp,f; double *dp,d; cp=&ch; ip=&i; fp=&f; dp=&d; printf("%p %p %p %p\n",cp,ip,fp,dp);//印出目前的各指標記憶體的位址; cp++; ip++; fp++; dp++; printf("%p %p %p %p\n",cp,ip,fp,dp);//印出各加一單位之後各指標記憶體的位址; return 0; } 結果印出來的答案如下: 000000000022FE3F 000000000022FE38 000000000022FE34 000000000022FE28 000000000022FE40 000000000022FE3C 000000000022FE38 000000000022FE30 我知道它們都是以十六進位的方式來看,我看得有點頭大。但以最後一組為例,000000000022FE28然後變成000000000022FE30,這組照說是反映出double *dp這個指標和它++之後的位址變化,書上說double的增加一個單位應是增加8個位元組。可是這二組位址似乎只差了2,怎麼看也不像是差了8個位元組啊? 請先進指教一下。 |
#2
|
|||
|
|||
會不會 跟 parity check 有關啊?
我是來亂說的... brain storm 一下 ^_^!
__________________
幫忙賺些奶粉錢, TKS! --- www.stock.com.tw |
#4
|
|||
|
|||
我以為是因為 夾了 除錯 演算碼,所以 才會位數不一樣
以前 做 通訊協定 protocol, 以為是 8bit, 結果要算 10bit, 才對, 因為 每一組封包, 前後 多了1個檢查碼! 這次 我們大概是 雞同鴨講 ^^
__________________
幫忙賺些奶粉錢, TKS! --- www.stock.com.tw |
#5
|
||||
|
||||
講得太深, 對於 自學的 哈啦 鴨 可能 不太理解 (但 哈啦 這方面 很有慧根, 應該還是會 想的通) 但對我這隻 番鴨 就真的是 人同豬講 - 絕對是白講了 |
#6
|
|||
|
|||
000000000022FE28然後變成000000000022FE30, 確實是加了8個byte, 沒錯
注意! 這是16進位表示法, 最後二碼的 30(16進制) 減去 28(16進制), 確實是 8 哈大是誤以為它們30跟28是十進制了 |
#7
|
||||
|
||||
又是鴨又豬的,豪哥一下子又是禽又是獸? 而我則當了禽?
引用:
|