首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gcc尽管变量类型相同,但还是抛出了从multiboot_uint64_t到multiboot_uint64_t*的抛出到指针的转换。

gcc尽管变量类型相同,但还是抛出了从multiboot_uint64_t到multiboot_uint64_t*的抛出到指针的转换。
EN

Stack Overflow用户
提问于 2020-07-23 04:09:26
回答 2查看 142关注 0票数 0

下面是触发警告的代码(public_mbd是一个struct multiboot_info):

代码语言:javascript
复制
multiboot_uint64_t* fadr;
fadr=(multiboot_uint64_t*)public_mbd->framebuffer_addr;

framebuffer_addr和结构的定义如下:

代码语言:javascript
复制
struct multiboot_info{
...
multiboot_uint64_t framebuffer_addr;
...
} 

gcc说:

代码语言:javascript
复制
warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]

我被这事弄糊涂了。fadr不是multiboot_uint64_t*吗?它们是一样大小的!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-23 05:18:31

这句话

代码语言:javascript
复制
public_mbd->framebuffer_addr

是类型

代码语言:javascript
复制
multiboot_uint64_t

尝试将其转换为(multiboot_uint64_t*)类型,即指向multiboot_uint64_t的指针。在您的体系结构中,multiboot_uint64_t和指针类型有不同的大小,但这并不重要;从类型直接转换到指向该类型的指针几乎从来都不是正确的做法。

也许您希望变量fadr指向public_mbd->framebuffer_addr。你可以通过

代码语言:javascript
复制
fadr = &(public_mbd->framebuffer_addr);

另外,当然,您可以完全避免指针并编写

代码语言:javascript
复制
multiboot_uint64_t fadr;
fadr = public_mbd->framebuffer_addr;

另一种可能是结构被错误地指定。如果希望framebuffer_addr字段本身成为指针,则需要编写

代码语言:javascript
复制
struct multiboot_info{
  ...
  multiboot_uint64_t* framebuffer_addr;
  ...
}    
票数 2
EN

Stack Overflow用户

发布于 2020-07-23 04:21:58

问题不在于faddr。问题在于演员们。

从类型上看,multiboot_uint64_t framebuffer_addr显然是64位。从警告中我们可以猜到,对于您的构建,指针是32位。因此,警告告诉您,您正在将64位int转换为32位指针。

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

https://stackoverflow.com/questions/63046773

复制
相关文章

相似问题

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