类型转换,c语言问题
我不能理解一些类型转换语法。例如类型转换,c语言问题,c,casting,C,Casting,我不能理解一些类型转换语法。例如 float f=7.0; short s=*(short *)&f; 这里发生了什么short s=*(short*)&f?看起来我们正在将something转换为指向short的指针,然后将s初始化为存储在something指向的地址中的值 现在,这个something看起来像变量f的地址。因此,如果某物=f的地址,在我看来,我们把f的地址作为一个指向某个短地址的指针,然后取消引用它。我知道我所说的是错的,但我似乎无法想象它 谢谢。你的解释是正确的。
float f=7.0;
short s=*(short *)&f;
这里发生了什么short s=*(short*)&f
?看起来我们正在将something
转换为指向short的指针,然后将s
初始化为存储在something
指向的地址中的值
现在,这个something
看起来像变量f
的地址。因此,如果某物
=f的地址
,在我看来,我们把f的地址
作为一个指向某个短地址的指针,然后取消引用它。我知道我所说的是错的,但我似乎无法想象它
谢谢。你的解释是正确的。它本质上迫使编译器将存储
f
的内存视为实际处理的短
。其结果将取决于平台。这与short s=(short)f非常不同代码>,它将执行一个很好的转换,并且定义良好 如果short
的大小与float
的大小相同,则此语法最有意义,即使如此,“”仍然存在问题
它用于将float
f的位解释为表示整数。它被用来规避s=(short)f代码>将被解释为到整数的转换。我相信是截断。1.无论何时键入cast,它都必须放在括号内()。
2.基本类型的内部范围(大小)不高于其他基本类型(括号外)。
3.在类型转换变量后,它将存储在您要转换的相同基元类型中。
4.指针表示它存储地址的内存。它将指示c中的星号(*)它应该是:
float f=7.0;
short s=*(short)&f;
i、 e该简短部分的值为7有人回答了这个问题,但出于某种原因将其删除。他说的一点是,&f
是指向浮点的指针。我想我面临的问题是,我会将&f
可视化为一个值,即一个地址,而不是一个变量/指针。所以这里发生的事情是,“指向浮点的指针”被转换为“指向短指针”,对吗?@naruto uzumaki是的,你例子中的转换是从“指向浮点的指针”到“指向短指针”的指针转换。谢谢!每次我在stackoverflow发帖时都能学到一些新东西,感觉真好:)@naruto uzumaki:你说得对,&f
是一个地址,而不是一个变量。然而,在C语言中,一切都有一个定义良好的类型,而不仅仅是变量。这里,&f
的类型是浮点*
,即“指向浮点的指针”。@Oli Charlesworth如果我说&f
是指向浮点的指针,对吗?当我发布的&f
是一个变量/指针时,我的基本意思是&f
是一个指针(因为指针只不过是一个存储地址的“变量”,为了我自己的清晰起见,我有时将指针称为变量。我应该顺理成章地放弃这个习惯:)