gpt4 book ai didi

c - 为什么在将整数分配给指针时最好使用强制转换?

转载 作者:行者123 更新时间:2023-11-30 19:53:08 24 4
gpt4 key购买 nike

假设我有以下代码:

  char *pointer;
unsigned int a;
pointer = a;

对我来说,这不会产生任何问题,但我会收到以下警告:

assignment makes pointer from integer without a cast

为什么使用cast更好?我使用的是 32 位机器。

编辑:通过“这不会产生任何问题”,我是说它编译并指针存储变量 a 的值。

编辑:变量a实际上会存储一个地址。

最佳答案

最好不要尝试将整数值分配给指针。根本。在极少数情况下,这样的分配有意义,强制转换不仅更好,而且是必需的。

指针和整数是不同的类型。在某些情况下,将它们混合使用是有意义的;在这种情况下,您需要进行强制转换,因为整数和指针之间没有隐式转换(0 的特殊情况除外,被视为空指针常量)。

char *pointer;
int a; /* or unsigned int a, it's the same either way */
pointer = a;

此分配是非法的(更准确地说,违反约束)。合格的 C 编译器至少必须对此发出警告。许多编译器在打印警告后,将生成执行隐式转换的代码,但这不是语言所要求的,您不应该依赖它。我个人的观点是,这样做的编译器不会给你带来任何好处。

pointer = (char*)a;

这是合法的;强制转换告诉编译器生成从 intchar* 的转换。但该转换的结果是实现定义的,并且很可能不会产生有意义的结果 - 即使 char*int 碰巧大小相同。

(在您问题的代码中,a尚未初始化。我认为您未向我们展示的实际代码中情况并非如此。)

您实际上想要实现什么目标?

关于c - 为什么在将整数分配给指针时最好使用强制转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25018455/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com