[問題] 題目問題

作者: ohburger (burger)   2018-12-13 11:55:08
最近在練習指標有一個問題很困擾我
int x[100]
int *p,*q
p=x
q=x+20
print(%d,q-p)
出來結果是20
問題1.是我單獨輸出%d,p,q
兩者卻差80
問題2.%d %p結果不同
%d,p 6487200
%P,P 00…62FCA0
問題是int *p 我理解是指的位置的值是int,p應該也是int 不知道為什麼會不同
我知道上面的程式是錯誤的,只是我是用手機一個一個打所以比較簡約不好意思,懇請幫
我解答
作者: lingege32 (MUDA)   2018-12-13 11:58:00
p-q 代表的是差距幾個int 單獨印出來是印記憶體位置而一個int是4 byte 所以會發現是4 * 20 的差距
作者: stfang925 (司馬鈴薯)   2018-12-13 13:19:00
美麗的誤會
作者: LPH66 (-6.2598534e+18f)   2018-12-13 19:07:00
問題2: 印出東西不同的原因就是 %d 和 %p 的不同不過我想你把很多東西全部混在一起了...
作者: ohburger (burger)   2018-12-14 11:35:00
喔喔第一個問題我知道了,但第二個還是有點模糊int *p不是指型態是int存指標嗎?,那%p,%d輸出結果應該只有表示型態不一樣,怎麼會有差別,先感謝上面大大的解惑。
作者: sarafciel (Cattuz)   2018-12-14 12:34:00
int存指標是什麼東西 指標就是指標 存的是記憶體位置p裡面存的是記憶體位置 以你的程式來說 就是x的位置但是單只有位置不夠 位置上面的資料是什麼東西也很重要所以才會有那個int來描述指標指到的位置 要怎麼解讀而%d跟%p %d表示的是10進位顯示 %p語意上是指標值顯示但是%p的這個指標值顯示 用的是16進位 所以你可以拿小算盤驗一下 你上面的那兩個印出結果 根本是同一個數字
作者: lingege32 (MUDA)   2018-12-14 13:39:00
作者: ohburger (burger)   2018-12-14 16:31:00
太感謝了這問題真的想了很久謝謝你們的指教,看來我把許多東西搞混了
作者: LPH66 (-6.2598534e+18f)   2018-12-14 19:20:00
我其實有點想要順帶提 %x, 但在你還沒搞懂時提好像會更亂現在有點概念了可以回頭去試用 %d %x 甚至 %o 去印整數同一個值在不同的列印格式下當然會有不同的列印結果至於 %p, 你該記的是 %p 只能印指標, 反之指標也只能用 %p印出十六進位是大多數環境的印法, 你就這樣記也沒關係

Links booklink

Contact Us: admin [ a t ] ucptt.com