首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >把地址排成整数可以吗?

把地址排成整数可以吗?
EN

Stack Overflow用户
提问于 2012-07-29 11:26:35
回答 3查看 1.3K关注 0票数 0
代码语言:javascript
运行
复制
Queue queue = createQueue(); //queue to store int values
Node *node = getNode(8); 
enQueue(queue, (int)node);//storing an address in the int

..... some other statements ....

Node *root = (Node *) deQueue(queue);//typecasting an int to address
Node *left = root->left;

在上面的代码中,队列可以存储整数值,而地址是存储在it.can中的。

,在int中存储地址可能有问题的情况或体系结构是什么?

请举几个例子。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-29 11:28:02

在int中存储地址可能存在问题的情况或任何体系结构是什么情况?

指针大于int的体系结构。也就是说,大多数64位系统。您可以使用long类型或更好的intptr_t

票数 9
EN

Stack Overflow用户

发布于 2012-07-29 14:58:46

你不需要去那些你的假设会咬你屁股的古怪的架构,采取64位的英特尔拱门:

代码语言:javascript
运行
复制
#include <stdio.h>
#include <stdlib.h>

int
main(int argc, const char *argv[])
{
    printf("sizeof int is %i\n", sizeof(int));
    printf("sizeof long is %i\n", sizeof(long));
    printf("sizeof void * is %i\n", sizeof(void *));

    exit(0);
}

哪种输出

代码语言:javascript
运行
复制
sizeof int is 4
sizeof long is 8
sizeof void * is 8

所以,是的,您会遇到问题,因为您将悄悄地截断您的地址的4个字节,导致在本质上随机内存上涂鸦。

这个故事的寓意是:如果你在处理指针,就使用指针。

票数 1
EN

Stack Overflow用户

发布于 2012-07-29 15:02:26

对于32位系统,intlongint*的大小通常是一致的,所以这不是一个问题。但是,在64位体系结构中将指针转换为整数(和返回)可能会失败。

对于C99或C11,它存在一个可选特性:来自stdint.h(u)intptr_t (一个可以存储在void指针中的值的整数类型)。它工作在许多平台上,除了使用自己的补充的机器。

使用C89,您可以使用一个unsigned long变量;它通常可以工作。但是为什么不使用void指针呢?

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

https://stackoverflow.com/questions/11708851

复制
相关文章

相似问题

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