Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
类型转换,c语言问题_C_Casting - Fatal编程技术网

类型转换,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
是一个指针(因为指针只不过是一个存储地址的“变量”,为了我自己的清晰起见,我有时将指针称为变量。我应该顺理成章地放弃这个习惯:)