声明指针;类型和名称之间空格的左侧或右侧的星号?

新手上路,请多包涵

可能的重复:

什么更有意义 - char* string 或 char *string? C++ 中的指针声明:星号的位置

我在很多代码中看到了这个的混合版本。 (顺便说一句,这适用于 C 和 C++。)人们似乎以两种方式之一声明指针,我不知道哪一种是正确的,甚至不知道它是否重要。

第一种将星号放在类型名称旁边的方法,如下所示:

 someType* somePtr;

第二种方法是将星号放在变量名称旁边,如下所示:

 someType *somePtr;

这已经让我发疯了一段时间了。有没有声明指针的标准方法?指针的声明方式是否重要?我以前使用过这两种声明,而且我知道编译器并不关心它是哪种方式。然而,我看到指针以两种不同的方式声明的事实让我相信这背后是有原因的。我很好奇这两种方法是否在我所缺少的某种方式上更具可读性或逻辑性。

原文由 jakogut 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

这是一个偏好问题,有点像圣战,就像括号样式一样。

“C++”风格

someType* somePtr;

是强调指针变量的类型。它本质上是说“--- 的类型是指向--- someType somePtr 的指针”。

“C”型

someType *somePtr;

正在强调指向数据的类型。它本质上是说“ somePtr 指向的数据类型是 someType ”。

它们的含义相同,但这取决于给定程序员在创建指针时的心理模型是否“集中”,可以说是指向数据或指针变量。

把它放在中间(如 someType * somePtr )试图避免承诺任何一个。

原文由 Tyler McHenry 发布,翻译遵循 CC BY-SA 4.0 许可协议

之所以出现这种差异,是因为 C++ 在 C 之上添加了更强大的 _类型系统_。


C风格

AC程序员通常从“价值观”的角度思考,所以

int  *pValue;

读取“ pValue 的 取消引用int ”。

C++ 风格

而 C++ 程序员在“类型”中思考,所以

int* pValue;

读取“pValue 的 类型指向 int 的指针”。


当然,编译器根本看不出有什么区别。然而你会发现,在 C++ 编程时,坚持“值语义”的是 C 程序员。

原文由 Lance Diduck 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题