作者ohburger (burger)
看板C_and_CPP
標題[問題] 題目問題
時間Thu Dec 13 11:55:08 2018
最近在練習指標有一個問題很困擾我
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 不知道為什麼會不同
我知道上面的程式是錯誤的,只是我是用手機一個一個打所以比較簡約不好意思,懇請幫
我解答
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.216.71.206
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1544673311.A.CA4.html
1F:→ lingege32: p-q 代表的是差距幾個int 單獨印出來是印記憶體位置 12/13 11:58
2F:→ lingege32: 而一個int是4 byte 所以會發現是4 * 20 的差距 12/13 11:58
3F:推 stfang925: 美麗的誤會 12/13 13:19
4F:推 LPH66: 問題2: 印出東西不同的原因就是 %d 和 %p 的不同 12/13 19:07
5F:→ LPH66: 不過我想你把很多東西全部混在一起了... 12/13 19:08
6F:→ ohburger: 喔喔第一個問題我知道了,但第二個還是有點模糊int *p 12/14 11:35
7F:→ ohburger: 不是指型態是int存指標嗎?,那%p,%d輸出結果應該只有 12/14 11:36
8F:→ ohburger: 表示型態不一樣,怎麼會有差別,先感謝上面大大的解惑。 12/14 11:36
9F:→ sarafciel: int存指標是什麼東西 指標就是指標 存的是記憶體位置 12/14 12:34
10F:→ sarafciel: p裡面存的是記憶體位置 以你的程式來說 就是x的位置 12/14 12:35
11F:→ sarafciel: 但是單只有位置不夠 位置上面的資料是什麼東西也很重要 12/14 12:38
12F:→ sarafciel: 所以才會有那個int來描述指標指到的位置 要怎麼解讀 12/14 12:41
13F:→ sarafciel: 而%d跟%p %d表示的是10進位顯示 %p語意上是指標值顯示 12/14 12:45
14F:→ sarafciel: 但是%p的這個指標值顯示 用的是16進位 所以你可以拿小 12/14 12:47
15F:→ sarafciel: 算盤驗一下 你上面的那兩個印出結果 根本是同一個數字 12/14 12:47
17F:→ lingege32: 幫你上小算盤 12/14 13:39
18F:→ ohburger: 太感謝了這問題真的想了很久謝謝你們的指教,看來我把許 12/14 16:31
19F:→ ohburger: 多東西搞混了 12/14 16:31
20F:推 LPH66: 我其實有點想要順帶提 %x, 但在你還沒搞懂時提好像會更亂 12/14 19:20
21F:→ LPH66: 現在有點概念了可以回頭去試用 %d %x 甚至 %o 去印整數 12/14 19:21
22F:→ LPH66: 同一個值在不同的列印格式下當然會有不同的列印結果 12/14 19:21
23F:→ LPH66: 至於 %p, 你該記的是 %p 只能印指標, 反之指標也只能用 %p 12/14 19:23
24F:→ LPH66: 印出十六進位是大多數環境的印法, 你就這樣記也沒關係 12/14 19:24