Int类型转换的简称并不起作用?

时间:2014-12-08 12:27:16

标签: c casting int short

#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);
}

我写了这段代码,但是这个变量是打印valus,如下所示。 Int-4的大小 短尺寸 - 2

当我"int*iInt=&vShort ;"提供相同的输出时,它也无效。

输出:

短期价值:3 价值iof短:196608

2 个答案:

答案 0 :(得分:6)

下面,

 int *iInt=(int)&vShort

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

如果你想&#34;演员&#34;一个shortint,只需分配它,整数提升就可以处理所有事情:

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;

答案 1 :(得分:0)

实际上这种类型的代码已经存在于我们的系统中,其中删除警告开发人员类型为int的short。这就是为什么我发布这个问题的原因是错误的。