2 gkc v GKC_V 于 2016.03.09 21:50 提问

【C语言】为什么指向char整数数组的char*相减得到的是long类型?

图片说明

5个回答

u010319440
u010319440   2016.03.09 21:56

事实上, char *p,*p1都是指针,一个指向数组第一个元素,一个指向第五个元素,指针的减法表示地址之间的差,而这是指向char的指针,因此得到的是两地址差/8的值,即sizeof()

qq_21792169
qq_21792169   2016.03.10 10:33

你测试一个问题的时候 把结果贴出来 方便解决

chen956
chen956   2016.03.10 10:53

指针运算得出的结果与指针指向的类型和系统位数有关。比如上述例子:p和p1指针指向的都是char,那么指针运算的单位是一个字节长度。
根据上述例子知道p的值是char数组的首地址,p1的值是char数组的第五个元素的地址,那么p1-p的结果应该是5x1(char型的字节长度)=5(32位系统)。
经过测试的确是5,long型的字节长度是4,并不是long型的字节长度。

John_ToStr
John_ToStr   Rxr 2016.03.10 15:05

指针相减得到的是偏移量,而你用的是%d输出的,所以是正形10进制数据

qilimi1053620912
qilimi1053620912   2016.03.11 18:59

这个要从内存来看的话,首先,指针里面存的值是地址,不同于char a这种,a表示的是a的地址里面的值,因为a是char,
只占一个字符,char相减得到的也就是一个字符。
现在来看指针,我们都知道32位对应的是4位,它的最小字段都是4个字节,这是内存对其,因为4位可以访问我32为系统的内存中任意位置,
所以这个指针也就只要4位,然后两个四位的数据相减得到的肯定是4位,在32位系统中long是4位的。
对于64位就对应的是8位,但是一般写程序都是默认32位,因为向上兼容。向下不兼容,这个大家都知道。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!