C中数组与指针的问题.急急急急急急急求帮助

lantishua 2008-03-20 07:08:29
各位高手,小弟在学习C的过程中看到一个小程序,但对程序为何出现此结果感到迷惑,初学,大家见笑.希望大家帮助,谢谢

使用语言平台:VC++6.0

程序如下

#include "stdafx.h"
#include "iostream.h"
int main(int argc, char* argv[])
{
//printf("Hello World!\n");
int a[3];
a[0]=1;
a[1]=2;
a[2]=3;
int* p,*q;
p=a;
q=&a[2];
cout<<a[q-p];
return 0;
}



在机器中运行结果为3.C++中整型占4个字节,那么q-p应该为8,我在程序运行时加了WATCH监视P和Q的值,也应该如此,但Q-P却为2.为什么?

运行时WATCH中变量的值显示如下:

P:0X0012FF74
Q:0X0012FF7C
Q-P:2
a[q-p]:3




...全文
72 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zenny_chen 2008-03-21
  • 打赏
  • 举报
回复
lantishua 2008-03-20
  • 打赏
  • 举报
回复
谢谢啊
lantishua 2008-03-20
  • 打赏
  • 举报
回复
谢谢啊
他来自江湖 2008-03-20
  • 打赏
  • 举报
回复
对 2 3 楼的对的哈
IFindit 2008-03-20
  • 打赏
  • 举报
回复
楼上正解,指针的运算是以指针类型的size为单位的, 而不是单纯地址值的计算。 如果指针指向一个结构,那么指针运算就会以sizeof(struct)为单位。
zenny_chen 2008-03-20
  • 打赏
  • 举报
回复
晕死。说明int类型的宽度为4个字节,也就是一个int类型变量在你的环境中占用4个字节。

所以,在你结果中,0X0012FF74存放1;0X0012FF78存放2;0X0012FF7C存放3。

而q - p的含义为:((unsigned int)q - (unsigned int)p) / sizeof(int),所以结果为2。
ttkk_2007 2008-03-20
  • 打赏
  • 举报
回复
p++的时候也不是加一个字节,他会按照指针类型去解释这块内存,指针-指针的时候一样

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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