C ++:Asterisks,Ampersand和Star?

时间:2012-04-08 07:59:49

标签: c++ operators

最近我在Programming Paradigms和教授身上看到了这个视频。使用了Asterisks,Star和Ampersand这样的术语。

这就是他如何使用这些运营商:

int i = 37;
float f = *(float*)&i;

他写作时如何表达第2行:

  

Float“f”等于星号浮星,我的&符号

我明白星号和&符号是什么意思,但在这里使用星星有什么意义?它是星号的同义词吗?

4 个答案:

答案 0 :(得分:8)

*之后的float用于形成类型。很多时候,当提到单词中的指针类型时,人们会在类型之后说“star”而不是“指针”,例如。 “malloc返回一个虚空星”。我从来没有听过有人用“星号”来引用一种类型。

开头的*用于取消引用指针,从而访问它指向的值(由于以下转换而被解释为float)。再次,根据我自己的经验,我从未听说过有人在这里使用“星号”。人们倾向于说“去引用”来描述正在进行的操作。

我不会读太多内容。你正确地发现了两种不同的背景,只要你从C ++的角度理解它们的含义那就没关系了。

答案 1 :(得分:3)

float f = *(float*)&i;

在这种情况下,左*和右*具有不同的语义。左*表示通过推荐获得的价值。右*声明引用类型。

答案 2 :(得分:1)

  

它是星号的同义词吗?

是。在我的 Windows键盘上按Shift + 8。您的示例演示了为什么您不应该尝试逐个符号地读取C ++程序。 C ++中的“等于”是“==”。 “=”是作业。另外,他忘了讲括号和分号。在这一点上(单行代码中有4个错误)他可以默默地写出该死的东西。

如果老兄读到这部分会好得多:

float f = *(float*)&i;

有点像这样:

“将指针指向i,C样式将其转换为指针浮动,取消引用,并将值赋给浮点变量f”。使“星/星号”胡言乱语更有意义。

P.S。如果你真的喜欢绕口令,你可以尝试大声朗读任何使用boost,iostreams,operator<<,casts,按位操作和“camel case”的代码来区分类和方法。这样的练习当然不会提高你的编程技巧......

答案 3 :(得分:0)

我认为主持人只是想在他写出代码时避免尴尬的沉默。据我所知,在这种情况下,星号和星号之间没有区别。