【发布时间】:2014-07-29 14:55:49
【问题描述】:
假设我有这个代码:
char *pointer;
unsigned int a;
pointer = a;
对我来说这不会产生任何问题,但我会收到以下警告:
assignment makes pointer from integer without a cast
为什么使用强制转换更好? 我使用的是 32 位机器。
编辑:
通过“这不会产生任何问题”,我是说它编译并指针存储变量a的值。
编辑:
而变量a 实际上会存储一个地址。
【问题讨论】:
-
将一种类型的指针存储到另一种类型的指针很奇怪,因此添加演员表可以清楚地表明这就是您的意图。
-
你能说出你到底想做什么吗?为什么需要将
a分配到pointer中? -
你应该通过扩展“对我来说这不会产生任何问题”的意思来澄清你的问题。
-
这并没有真正改变任何事情。
-
@StoicaDan:正如我所提到的,我在一台具有 32 位
ints 和 64 位指针的机器上键入这个,这很常见。在这种情况下,您不能在不丢失信息的情况下将指针存储在int中。有整数类型intptr_t和uintptr_t,在<stdint.h>中声明,它们可以存储转换后的指针(如果这些类型存在)。我没有必要删除这个问题;一些答案中有一些很好的信息。