短到 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=&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 到 short 的缩小转换不起作用