不同类型指针之间的减法
参见英文答案 >
Pointer/Address difference ????????????????????????????????????3个
我试图找到两个变量之间的内存距离.具体来说,我需要找到char []数组和int之间的距离. char data[5]; int a = 0; printf("%pn%pn",&data[5],&a); long int distance = &a - &data[5]; printf("%ldn",distance); 当我在没有最后两行的情况下运行我的程序时,我得到了两个变量的正确内存地址,如下所示: 0x7fff5661aac7 0x7fff5661aacc 现在我明白了,如果我没错,两者之间有5个字节的距离(0x7fff5661aac8,0x7fff5661aac9,0x7fff5661aaca,0x7fff5661aacb,0x7fff5661aacc). 为什么我不能减去类型(int *)和类型(char *)之一的指针.两者都是指内存地址..我该怎么做才能计算两者之间的距离,以字节为单位?我尝试了两个指针中的一个,但它没有用. 我得到:“错误:’char *’和’int *’不是兼容类型的指针”.谢谢大家都会帮助我 解决方法
不,这是不可能的.
首先,你只能减去(到)“兼容”类型的指针,这里的int和char不是兼容的类型.因此减法是不可能的. 也就是说,即使两者都是兼容类型的指针,那么,以下内容也会出现. 所以,其次,你不能只减去两个任意指针,它们必须基本上是同一个数组的(元素的地址)的一部分. Othweise,它调用undefined behavior. 引用C11,章节§6.5.6,附加运算符
第三,另一个重点是,减去两个指针的结果是ptrdiff_t类型,一个有符号整数类型.
因此,要打印结果,您需要使用%td格式说明符. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |