[问题] 题目问题

楼主: 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