首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将空指针强制转换为long类型,而不是指针long?

将空指针强制转换为long类型,而不是指针long?
EN

Stack Overflow用户
提问于 2015-03-04 11:38:25
回答 2查看 9.8K关注 0票数 0
代码语言:javascript
运行
复制
 int cmpLong(void *a, void *b) {
    long aa = (long)a;
    long bb = (long)b;
    return aa - bb;
}

我真的不明白这段代码的目的,它比较的是什么?当一个空指针被强制转换为long时,它是一个任意的数字,还是仍然有一定的意义?

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

下面是我重写的代码:

代码语言:javascript
运行
复制
int cmpLong(void *a, void *b) {
    // casting void pointers to long pointers
    long *aa = (long*)a;
    long *bb = (long*)b;
    return *aa - *bb;
}

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-04 11:48:48

它们做了完全不同的事情。

代码语言:javascript
运行
复制
 int cmpLong(void *a, void *b) {
    long aa = (long)a;
    long bb = (long)b;
    return aa - bb;
}

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

代码语言:javascript
运行
复制
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

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

代码语言:javascript
运行
复制
int cmpLong(void *a, void *b) {
    // casting void pointers to long pointers
    long *aa = (long*)a;
    long *bb = (long*)b;
    return *aa - *bb;
}

玩同样的游戏:

代码语言:javascript
运行
复制
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.
票数 2
EN

Stack Overflow用户

发布于 2016-11-04 21:20:26

顺便说一句,我刚刚学到了一个艰难的方法,你不能将一个指针转换成长的,然后期望能够将它转换回一个指针。负指针值将不会在转换后存活:最高位将被复制。

也许unsigned long可以工作,但由于我是通过swig将值传递给java,而java没有无符号整数类型,所以我无法尝试这样做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28846270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档