加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

不同类型指针之间的减法

发布时间:2020-12-16 10:37:07 所属栏目:百科 来源:网络整理
导读:参见英文答案 Pointer/Address difference ????????????????????????????????????3个 我试图找到两个变量之间的内存距离.具体来说,我需要找到char []数组和int之间的距离. char data[5]; int a = 0; printf("%pn%pn",data[5],a); long int distance = a -
参见英文答案 > 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,附加运算符

When two pointers are subtracted,both shall point to elements of the same array object,
or one past the last element of the array object; the result is the difference of the
subscripts of the two array elements. [….]

第三,另一个重点是,减去两个指针的结果是ptrdiff_t类型,一个有符号整数类型.

[…] The size of the result is implementation-defined,
and its type (a signed integer type) is ptrdiff_t defined in the <stddef.h> header. […]

因此,要打印结果,您需要使用%td格式说明符.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读