最近我在Programming Paradigms和教授身上看到了这个视频。使用了Asterisks,Star和Ampersand这样的术语。
这就是他如何使用这些运营商:
int i = 37;
float f = *(float*)&i;
他写作时如何表达第2行:
Float“f”等于星号浮星,我的&符号
我明白星号和&符号是什么意思,但在这里使用星星有什么意义?它是星号的同义词吗?
答案 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)
我认为主持人只是想在他写出代码时避免尴尬的沉默。据我所知,在这种情况下,星号和星号之间没有区别。