作者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/cn.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