gpt4 book ai didi

将 void 指针转换为 long 类型,而不是 long 指针?

转载 作者:太空宇宙 更新时间:2023-11-04 08:29:56 35 4
gpt4 key购买 nike

 int cmpLong(void *a, void *b) {
long aa = (long)a;
long bb = (long)b;
return aa - bb;
}

我不太明白这段代码的目的是比较什么?当一个 void 指针被转换为 long 时,它是一个任意数字还是它仍然具有某种意义?

我重写了这段代码,以便在 void *a 和 void *b 之间进行比较

这是我重写的代码:

int cmpLong(void *a, void *b) {
// casting void pointers to long pointers
long *aa = (long*)a;
long *bb = (long*)b;
return *aa - *bb;
}

这对我来说更有意义,但我不知道它是否在做与原始代码相同的事情。

最佳答案

这些完全不同。

 int cmpLong(void *a, void *b) {
long aa = (long)a;
long bb = (long)b;
return aa - bb;
}

这是比较两个地址。它将返回两个地址值之间的字节数差异。为了理解这一点,让我们给他们一些数字并玩电脑。

a = 0x2000;
b = 0x1000;
long aa = (long)a; // So aa = 0x1000. Casting only changes the type, not the value.
long bb = (long)b; // bb = 0x2000.
return aa - bb; // 0x2000 - 0x1000 => returns 0x1000

现在让我们看看您的示例,它做了完全不同的事情。

int cmpLong(void *a, void *b) {
// casting void pointers to long pointers
long *aa = (long*)a;
long *bb = (long*)b;
return *aa - *bb;
}

玩同一个游戏:

a = 0x2000;
b = 0x1000;
long* aa = (long*)a; // aa = 0x1000. Casting still doesn't change the value.
long* bb = (long*)b; // bb = 0x2000.
return *aa - *bb; // *aa is the data at 0x1000. This data is treated as a long value.
// *bb is the data at 0x2000, again treated as a long value.
// so *aa - *bb is the difference between the values at 0x2000 and 0x1000 when read as longs.

关于将 void 指针转换为 long 类型,而不是 long 指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28846270/

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