事实上, char *p,*p1都是指针,一个指向数组第一个元素,一个指向第五个元素,指针的减法表示地址之间的差,而这是指向char的指针,因此得到的是两地址差/8的值,即sizeof()
你测试一个问题的时候 把结果贴出来 方便解决
指针运算得出的结果与指针指向的类型和系统位数有关。比如上述例子:p和p1指针指向的都是char,那么指针运算的单位是一个字节长度。
根据上述例子知道p的值是char数组的首地址,p1的值是char数组的第五个元素的地址,那么p1-p的结果应该是5x1(char型的字节长度)=5(32位系统)。
经过测试的确是5,long型的字节长度是4,并不是long型的字节长度。
指针相减得到的是偏移量,而你用的是%d输出的,所以是正形10进制数据
这个要从内存来看的话,首先,指针里面存的值是地址,不同于char a这种,a表示的是a的地址里面的值,因为a是char,
只占一个字符,char相减得到的也就是一个字符。
现在来看指针,我们都知道32位对应的是4位,它的最小字段都是4个字节,这是内存对其,因为4位可以访问我32为系统的内存中任意位置,
所以这个指针也就只要4位,然后两个四位的数据相减得到的肯定是4位,在32位系统中long是4位的。
对于64位就对应的是8位,但是一般写程序都是默认32位,因为向上兼容。向下不兼容,这个大家都知道。