编译器警告 – 从指针转换为不同大小的整数
发布时间:2020-12-16 05:28:00 所属栏目:百科 来源:网络整理
导读:我正在尝试创建一个可以保存通用值的结构.下面的代码有效,但我收到一个关于从指针到整数的强制转换的编译器警告.这是在64位系统上. struct node{ void *key; void *value;};void insert(struct node *ht,void *key,void *value){ ht-key = key; ht-value = v
我正在尝试创建一个可以保存通用值的结构.下面的代码有效,但我收到一个关于从指针到整数的强制转换的编译器警告.这是在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类型(与指针大小相同的整数类型). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |