我无法理解某些类型转换语法。例如。
float f=7.0;
short s=*(short *)&f;
这里发生了什么short s=*(short *)&f
?看起来我们正在将something
作为指向short的指针,然后将s
初始化为存储在something
指向的地址中的值。
现在,此something
看起来像变量f
的地址。因此,如果something
= address of f
,我觉得我们正在将address of f
作为指向某个短片的指针然后取消引用它。我知道我说的是错的,但我似乎无法想象它。
感谢。
答案 0 :(得分:5)
如果short
与float
的大小相同,则此语法最有意义,即便如此,“strict aliasing rules”也会出现问题。
它用于将float
f的位解释为表示整数。它用于规避将s = (short) f;
解释为转换为整数的事实。截止,我相信。
答案 1 :(得分:2)
您的解释是正确的。它实质上是强制编译器将存储f
的内存视为实际处理short
。其结果将取决于平台。这与short s = (short)f;
非常不同,{{1}}只执行一个很好的转换,并且定义明确。
答案 2 :(得分:1)
1.无论何时输入某些东西,它都必须在括号()的内部。 2.原始类型的内部不是其他原始类型(括号外)的范围(大小)。 3.在对变量进行类型转换后,它将存储在您要转换的相同基元类型中。 4.Pointer表示它存储address的内存。它将在c。(*)
中指示星号答案 3 :(得分:0)
它应该是:
float f=7.0;
short s=*(short)&f;
,即short被赋值为7