微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

编译器警告 – 从指针转换为不同大小的整数

我正在尝试创建一个可以保存通用值的结构.下面的代码有效,但我收到一个关于从指针到整数的强制转换的编译器警告.这是在64位系统上.
struct node
{
    void *key;
    void *value;
};

void insert(struct node *ht,void *key,void *value)
{
    ht->key = key;
    ht->value = value;
    return;
}

int main()
{
    struct node *t = (struct node *)malloc(sizeof(struct node));
    insert(t,(void *)3,(void *)5);
    printf("[%d]->[%d]\n",(int)t->key,(int)t->value);
    free(t);
    return 0;
}

我甚至不确定这是否是正确的方法.我有点黑了.如果有正确的方法,请告诉我.

解决方法

编译器尝试警告您从void *转换为int时丢失位.它不知道void *实际上是一个int转换,所以丢失的位是没有意义的.

双重演员将解决此(int)(uintptr_t)t->键.它首先将void *转换为uintptr_t(相同大小,没有警告),然后将uintptr_t转换为int(数字到数字,没有警告).你需要包含< stdint.h>拥有uintptr_t类型(与指针大小相同的整数类型).

原文地址:https://www.jb51.cc/c/114771.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐