短到 Int 类型转换不起作用,为啥?

Posted

技术标签:

【中文标题】短到 Int 类型转换不起作用,为啥?【英文标题】:Short to Int typecasting doesn't work why?短到 Int 类型转换不起作用,为什么? 【发布时间】:2014-12-08 12:27:16 【问题描述】:
#include <stdio.h>

main()

short vShort=3;
int *iInt=(int *)&vShort ;
printf("Value of short: %d\n",vShort);
printf("Value iof short: %d\n",*iInt);


我写了这段代码,但是这个变量正在打印如下的值。 Int-4 的大小 Sizeof Short - 2

当我执行"int*iInt=&amp;vShort ;" 时它也不起作用,它给出了相同的输出。

输出:

空头值:3 短值iof:196608

【问题讨论】:

这一行在很多层面上都是错误的...... 你的编译器没有给出任何关于这段代码的警告吗?如果是这样,您将来最好注意它们。 老实说,我什至不知道你在这里试图完成什么。 我很惊讶这个编译。你能描述一下你想要做什么吗? 一个int * 应该指向一个int。施法不会导致魔法发生。 【参考方案1】:

这里,

 int *iInt=(int)&vShort

您将变量的地址转换为int(这是未定义的行为,或者至少定义了实现,因为整数可能不足以容纳指针的值,只有uintptr_t 是)。

如果您想将short“转换”为int,只需分配它,整数提升将处理一切:

short s = 3; // note that this line already technically casts the integer literal 3 to type short
int i = s;

如果您想要一个指向 int 值的指针,您需要创建一个局部变量并获取其地址,或者使用 malloc 为其分配内存:

short s = 3;
int i; // if you add "= s" here you can drop the last line
int* iptr = &i;
*iptr = s;

【讨论】:

【参考方案2】:

实际上这种类型的代码已经存在于我们的系统中,删除警告开发人员类型转换为 int 的短。这就是为什么我发布这个问题,这段代码有什么问题。

【讨论】:

以上是关于短到 Int 类型转换不起作用,为啥?的主要内容,如果未能解决你的问题,请参考以下文章

为啥浮点数据类型在没有类型转换 4.7 的情况下在此代码中不起作用? [复制]

为啥这种从 int 到 double& 的转换不起作用?

如果在三元运算符中使用局部变量,为啥从 int 到 short 的缩小转换不起作用

AnyLogic - 为啥我的基于条件的转换不起作用?

为啥 == 在比较具有相同 int 值的两个对象类型变量时不起作用

无法将类型 double 隐式转换为 int