输入类型,c语言问题

时间:2010-09-04 09:34:11

标签: c casting

我无法理解某些类型转换语法。例如。

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作为指向某个短片的指针然后取消引用它。我知道我说的是错的,但我似乎无法想象它。

感谢。

4 个答案:

答案 0 :(得分:5)

如果shortfloat的大小相同,则此语法最有意义,即便如此,“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