#include<stdio.h>
int main()
{
int arr[5]={0,1,2,3,4};
int *pb=&arr+1 ;
printf("%d \n",pb-arr);
return 0;
}
指针相减的结果是一种有符号整数类型:ptrdiff_t
指针相减就是两个指针在内存中的距离(以数组长度为单位,而不是以字节为单位),因为指针减法的结果将除以数组元素类型的长度;
若想求指针相减的字节大小,可以强制类型转换:int c=(int )pb - (int )arr 。
那么指针相减的合法性在哪呢?
如果两个指针都指向同一个数组中的元素,那么它就是合法的,如果两个指针所指向的不是同一个数组中的元素,那么它们相减的结果是未定义的,就好像你将两个位于不同街道的房子的门牌号相减不可能得到这两所房子间的房子数一样,程序员无从知道两个数组在内存中的相对位置,如果不知道这一点,两个指针之间de距离就毫无意义。
1330

被折叠的 条评论
为什么被折叠?



