首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将8位指针转换为长指针

将8位指针转换为长指针
EN

Stack Overflow用户
提问于 2017-04-03 10:30:23
回答 1查看 929关注 0票数 1

我试图在我的c++项目中使用第三方c库,这个库是我在Windows64位上使用Visual开发的。成功编译了32位和64位;但是,在运行64位时,我在外部库中发现了一个问题,如下所示:

代码语言:javascript
复制
double* foo(){
     double* b; long a; long i;
     /*
       ... do some stuff to assign values to b, a, i ...
     */
     return ( (long)b + a + i );
}

问题是(至少在windows上) double*在x86体系结构中由4个字节表示,在x64中用8个字节表示,所以返回语句中的b转换就结束了。

我的问题是,是否可以从指针b的8位表示中“提取”指针(b+a)的4字节地址,以便使表达式(b+a)有意义?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-03 10:37:27

据推测,转换是为了避免对sizeof(double)的倍数执行指针算术。

您可以对char *指针做同样的操作,完全避免大小问题。我还将强制转换添加到丢失代码的原始指针类型中。

代码语言:javascript
复制
return (double *)( (char *)b + a + i );

备注:您应该知道,您可以轻松地创建未对齐指针,如果取消引用,这可能导致未定义的行为。这也是您的原始代码的问题。

小心点;您的代码看起来很可疑,而且可能还有其他潜在的挖掘。

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

https://stackoverflow.com/questions/43182257

复制
相关文章

相似问题

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