Possible Duplicates:
What makes more sense - char* string or char *string? Pointer declarations in C++: placement of the asterisk

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

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

someType* somePtr;

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

someType *somePtr;

这让我发疯已经有一段时间了.声明指针有什么标准方法吗?指针是如何声明的甚至重要吗?我以前使用过这两个声明,我知道编译器不关心它是哪种方式.然而,我看到指针以两种不同的方式声明,这一事实使我相信它背后有一个原因.我很好奇这两种方法中的哪一种更具可读性,或者在某种程度上更符合逻辑,而我没有做到这一点.

推荐答案

这是一个偏爱的问题,有点像圣战,就像支架风格一样.

风格

someType* somePtr;

强调指针变量的类型.它本质上是说,"somePtr的类型是指向someType的指针".

风格

someType *somePtr

强调指向数据的类型.从本质上讲,它是在说,"somePtr所指的数据类型是someType".

它们的含义是相同的,但这取决于给定程序员在创建指针时的心智模型是否"聚焦",也就是说,"聚焦"于指向的数据或指针变量.

把它放在中间(如someType * somePtr)是试图避免promise 其中任何一个.

C++相关问答推荐

C++ cout打印顺序与C print相比

生成C代码时自动复制/生成' tmwtypes.h '依赖项

理解C中的指针定义

不同到达时间的轮询实现

返回一个包含数组的 struct

在没有动态内存分配的情况下,用C语言最快地将各种数组复制到单个较大的数组中

如何创建一个C程序来存储5种动物的名字,并在用户 Select 其中任何一种动物时打印内存地址?

如何在c++中包装返回空*的函数

在创建动态泛型数组时,通过realloc对故障进行分段

是否可以通过调用两个函数来初始化2D数组?示例:ARRAY[STARTING_ROWS()][STARTING_COLUMNS()]

如何在VS 2022中正确安装额外的C头文件

Fprintf正在写入多个 struct 成员,并且数据过剩

使用正则表达式获取字符串中标记的开始和结束

Valgrind正在使用一个Fexecve电话报告不可能发生的事情

c程序,让用户输入两类数字,并给出输出用户输入多少个数字

为什么会导致分段故障?(C语言中的一个程序,统计文件中某个单词的出现次数)

程序如何解释变量中的值

共享内存未授予父进程权限

C/C++编译器可以在编译过程中通过按引用传递来优化按值传递吗?

C语言程序流程解释