求C语言大神指教!

lilong1210 2015-09-08 12:29:30
#include <stdio.h>
int main()
{
int i;
int *p1, *p2;
p1 = &i + 1;
p2 = &i;
printf("%X\n", p2);
printf("%X\n", p1);
printf("%X\n", p1 - p2);
printf("%X\n", (char*)p1-(char*)p2);
}


输出结果为:21F418
21F41C
1
4
谁能给我解释下这个代码,加了(cha*)到底起了什么变化?
...全文
91 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
heroesjun 2015-09-08
  • 打赏
  • 举报
回复
p1和p2是两个指向整形的指针,因为在32位机器上,整形占4个字节,所以对于它们,加一操作,实际上是原地址加4(一个字节对应一个地址),所以p1-p2等于1。 当把p1和p2强转成char *型后,因为一个char占一个字节,所以p1-p2得出实际地址差,即4。
lilong1210 2015-09-08
  • 打赏
  • 举报
回复
引用 1 楼 heroesjun 的回复:
p1和p2是两个指向整形的指针,因为在32位机器上,整形占4个字节,所以对于它们,加一操作,实际上是原地址加4(一个字节对应一个地址),所以p1-p2等于1。 当把p1和p2强转成char *型后,因为一个char占一个字节,所以p1-p2得出实际地址差,即4。
专业!多谢!

37,721

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧