gpt4 book ai didi

c - 减去 2 个带符号结果的指针,适合输入到红黑树 "comparator"

转载 作者:太空宇宙 更新时间:2023-11-04 00:40:02 24 4
gpt4 key购买 nike

在 C 中,下面的工作是否有效?

struct fdBase *left, *right;
int result = (int)(left - right);

result 可以是负数。如果那行不通,我该如何编写?

我的目标是为我的红黑树排序函数提供一些东西,一个所谓的指针“比较器”。 我不是在做数组工作,我需要指针之间的实际差异,以字节为单位。

最佳答案

根据定义,C 中两个指针相减的结果具有带符号的结果。结果具有 ptrdiff_t 类型,这是一个带符号的整数类型。

这里的重要细节是您不能只减去任意两个指针。为了定义结果,指针必须指向同一数组的元素(或指向虚构的“结束后的一个”元素)。

减法的结果以元素而不是字节表示,即它与 C 中的其余指针算法一致。A - B 的结果可以而且将是负数,如果 A 指向一个索引大于 B 的元素。

如果您需要指针指向的原始地址之间的字节差异,或多或少正式有效的方法如下

intptr_t difference = (intptr_t) left - (intptr_t) right;

这样你就不会减去指针(因为它不是为任意指针定义的),而是减去它们的整数表示。 (intptr_t) some_pointer 转换的结果是实现定义的,但通常它是存储在指针中的物理内存地址。不幸的是,这种方法有其自身的一些问题:对于具有 1 高位的指针,它可能会产生不正确的结果。此类指针在转换为 intptr_t 时通常会产生负值。

关于c - 减去 2 个带符号结果的指针,适合输入到红黑树 "comparator",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12754733/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com