一个C语言的指针与地址关系的问题
inta[3];a[0]=0;a[1]=1;a[2]=2;int*p,*q;p=a;q=&a[2];cout<<a[q-p]<<'\n';假设q的实际地址似乎0x22ff...
int a[3];
a[0]=0;a[1]=1;a[2]=2;
int *p,*q;
p=a;
q=&a[2];
cout<<a[q-p]<<'\n';
假设q的实际地址似乎0x22ff70,p的实际地址是0x22ff68,0x22ff70-0x22ff68=8.
则q-p的实际运算时(0x22ff70-0x22ff68)/sizeof(int)=2;
我想问的是为啥q-p还要除以sizeof(int)啊? 展开
a[0]=0;a[1]=1;a[2]=2;
int *p,*q;
p=a;
q=&a[2];
cout<<a[q-p]<<'\n';
假设q的实际地址似乎0x22ff70,p的实际地址是0x22ff68,0x22ff70-0x22ff68=8.
则q-p的实际运算时(0x22ff70-0x22ff68)/sizeof(int)=2;
我想问的是为啥q-p还要除以sizeof(int)啊? 展开
5个回答
展开全部
在c中,指针式可以运算的,比如p+1,p++ ,p+n等,但是这里的+1,+n到底是什么意思呢?注意不是真正的1,而是1个单位。一个什么单位呢,要看指针的类型。指针是int*,那么这里的+1就是+4个字节的意思,也就是+1个单位的int。如果指针式double*p,那么+1就是加1个double,也就是八个字节,如果是对象指针,也是同样。
你上面的例子q-p也不是简单的指针的值(地址)的差,而是他们两个之间的单位差,也就是qp之间差几个单位,他们是int*,也就是差几个int。所以不能用地址减完就收工,要处以4,得到单位差
你上面的例子q-p也不是简单的指针的值(地址)的差,而是他们两个之间的单位差,也就是qp之间差几个单位,他们是int*,也就是差几个int。所以不能用地址减完就收工,要处以4,得到单位差
展开全部
因为你是要取第几位啊,这个a[]里的数是指第几位int型数据。(0x22ff70-0x22ff68)这个结果只是内存长度,而你要的下标是第几个int值。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
指针保存了某个变量的地址
而指针本身其实也是一个变量,它也有自身的地址, 而指针的内容是某个变量的地址
内存是有地址的,就像每个具体的地方都对应了唯一一个地址一样
比如我在一张纸上写了某个地方的地址
这张纸不等于地址,但是通过这张纸,你可以找到这个地方
而指针本身其实也是一个变量,它也有自身的地址, 而指针的内容是某个变量的地址
内存是有地址的,就像每个具体的地方都对应了唯一一个地址一样
比如我在一张纸上写了某个地方的地址
这张纸不等于地址,但是通过这张纸,你可以找到这个地方
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
也不是说(0x22ff70-0x22ff68)/sizeof(int),只是因为sizeof(int)刚好是一个字节的长度,c语言向你展示的已经是字节层级的距离了,也就是说两个指针之间相距两个字节的长度。因为对于编程而言,需要关心的最小单位是字节,位的距离对你是没有意义的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
(q-p)/sizeof(int) 的意思是:q和p之间所包含整型数int 的个数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询