两个指针之间的运算
只有指向同⼀数组的俩个指针变量之间才可以进⾏计算。否则是没有意义的。
两指针变量相减sizeof 指针
两指针变量相减所得之差是俩个指针所指数组之间相差的元素个数。实际上是俩个指针值(地址)相减之差再除以该数组元素的长度(字节数)
注意:因为俩个指针相加没有任何意义,所以别乱搞。
int* pf1, *pf2;
int arr[10] = {0};
pf1 = arr;
pf2 = arr+1;
auto result = pf2 - pf1;
计算机具体运算是两个地址值相减。应该是重载了运算符“-”,结果是指针值相减除以指针所指对象的⼤⼩。因为单纯的地址值相减就会和指针所指的对象有关系,所指对象不同那么它的偏移量就会不同。⽐如,所指的是字符型相减就是1,如果是双精度型那么就是是8。然⽽如果重载了之后指针相减了就仅仅是为了表⽰指针所指元素的距离。再说⼀遍这只是在连续的内存块中才有意义(数组)。那么接下来这⾏代码就有意思了。
auto result = (char*)pf2 - (char*)pf1;
这⾏代码得出的结果是4,没错你没有看错。最后的结果就是4。因为重载的运算机制如下:
那么偏移量怎么计算呢?就是两个指针的实际的差值。如果你通过强制转换成字符型(char)那么分母的⼤⼩就是1⽽不是4,这样的话就是扩⼤了四倍。最后就是得出结果就是元素的距离乘以扩⼤的倍数。最终得出的结果就是4。
指针相减是指两个指针值(地址)相减之差再除以该数组元素的长度(字节数)的意思了吧!上次回答:得到 (指针尾 - 指针头)/ sizeof(数组的类型) = 中间有⼏个元素;
但是 / sizeof(类型) 编译器已经帮我们实现好了.所以就⽆需我们做这⼀步
请教⼀下,这个的结果是什么?关于两个指针相减的问题
p1=(int *)ox0500;
p2=(int *)ox0518;
value=p2-p1;
printf(“%d”,value)
p1=(int *)ox0500;
p2=(int *)ox0518; 这两句是吧 0x0500和0x0518这两个16进制数强制的作为Int型变量的地址。两个Int型变量的地址之差就是这两个地址中间可以有多少个int型变量。(这是因为C语⾔可以根据变量的类型来决定地址增加的实际空间。⽐如你定义⼀个int指针int
*p,p=p+1时,其实在内存地址中实际加4,因为int在C中4个字节。)
0x0518-0x0500=24 24/4=6 所以结果应该为6 即两个地址之间可以有6个int变量的空间。
两指针变量进⾏关系运算
指向同⼀数组的俩个指针变量进⾏运算可以表⽰它们所指数组元素之间的关系,⽐如:
pf1 == pf2 表⽰指向同⼀元素。
pf1 > pf2 表⽰pf1处在⾼地址位置。
pf1 < pf2 表⽰pf1 处在低地址位置。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论