[問題] 題目問題

看板C_and_CPP作者 (burger)時間5年前 (2018/12/13 11:55), 編輯推噓3(3021)
留言24則, 5人參與, 5年前最新討論串1/1
最近在練習指標有一個問題很困擾我 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://www.ptt.cc/bbs/C_and_CPP/M.1544673311.A.CA4.html

12/13 11:58, 5年前 , 1F
p-q 代表的是差距幾個int 單獨印出來是印記憶體位置
12/13 11:58, 1F

12/13 11:58, 5年前 , 2F
而一個int是4 byte 所以會發現是4 * 20 的差距
12/13 11:58, 2F

12/13 13:19, 5年前 , 3F
美麗的誤會
12/13 13:19, 3F

12/13 19:07, 5年前 , 4F
問題2: 印出東西不同的原因就是 %d 和 %p 的不同
12/13 19:07, 4F

12/13 19:08, 5年前 , 5F
不過我想你把很多東西全部混在一起了...
12/13 19:08, 5F

12/14 11:35, 5年前 , 6F
喔喔第一個問題我知道了,但第二個還是有點模糊int *p
12/14 11:35, 6F

12/14 11:36, 5年前 , 7F
不是指型態是int存指標嗎?,那%p,%d輸出結果應該只有
12/14 11:36, 7F

12/14 11:36, 5年前 , 8F
表示型態不一樣,怎麼會有差別,先感謝上面大大的解惑。
12/14 11:36, 8F

12/14 12:34, 5年前 , 9F
int存指標是什麼東西 指標就是指標 存的是記憶體位置
12/14 12:34, 9F

12/14 12:35, 5年前 , 10F
p裡面存的是記憶體位置 以你的程式來說 就是x的位置
12/14 12:35, 10F

12/14 12:38, 5年前 , 11F
但是單只有位置不夠 位置上面的資料是什麼東西也很重要
12/14 12:38, 11F

12/14 12:41, 5年前 , 12F
所以才會有那個int來描述指標指到的位置 要怎麼解讀
12/14 12:41, 12F

12/14 12:45, 5年前 , 13F
而%d跟%p %d表示的是10進位顯示 %p語意上是指標值顯示
12/14 12:45, 13F

12/14 12:47, 5年前 , 14F
但是%p的這個指標值顯示 用的是16進位 所以你可以拿小
12/14 12:47, 14F

12/14 12:47, 5年前 , 15F
算盤驗一下 你上面的那兩個印出結果 根本是同一個數字
12/14 12:47, 15F

12/14 13:39, 5年前 , 16F

12/14 13:39, 5年前 , 17F
幫你上小算盤
12/14 13:39, 17F

12/14 16:31, 5年前 , 18F
太感謝了這問題真的想了很久謝謝你們的指教,看來我把許
12/14 16:31, 18F

12/14 16:31, 5年前 , 19F
多東西搞混了
12/14 16:31, 19F

12/14 19:20, 5年前 , 20F
我其實有點想要順帶提 %x, 但在你還沒搞懂時提好像會更亂
12/14 19:20, 20F

12/14 19:21, 5年前 , 21F
現在有點概念了可以回頭去試用 %d %x 甚至 %o 去印整數
12/14 19:21, 21F

12/14 19:21, 5年前 , 22F
同一個值在不同的列印格式下當然會有不同的列印結果
12/14 19:21, 22F

12/14 19:23, 5年前 , 23F
至於 %p, 你該記的是 %p 只能印指標, 反之指標也只能用 %p
12/14 19:23, 23F

12/14 19:24, 5年前 , 24F
印出十六進位是大多數環境的印法, 你就這樣記也沒關係
12/14 19:24, 24F
文章代碼(AID): #1S4TWVoa (C_and_CPP)