好的,我知道
int *ptr;
是指向 / 的 int 的指针
.
如果我要
int i = *ptr;
我正在取消引用指向一个值的指针
.
但我的问题是,为什么这么普遍使用
int *ptr;
并不是
int* ptr;
反而?它们本质上是相同的,但是第一个示例看起来像是取消引用而不是指针声明,而第二个示例是指针的非常清晰的定义。
因为第一个选项在语法上更符合语言:
int *a, *b; // they are both pointers
int* a, b; // only a is a pointer
其次,C 程序员倾向于从数据方面考虑,因此将指针属性与变量名而不是变量类型相关联会感觉很自然。C++ 程序员倾向于根据类型来思考,因此您可能会在 C++ 代码中更频繁地看到第二种表示法。
这两种表示法是等价的,但取决于您如何看待给定语言中的指针,您可能希望使用一种表示法或另一种(或完全不同的一种表示法)。
使用第一种形式是因为它在一次声明多个变量时提供了更好的视觉提示:
int *ptr, actualInt;
要声明两个指针,您将执行以下操作:
int *ptr1, *ptr2;
比较
int* ptr1, ptr2;
后者中的 ptr2 具有 type 并不那么明显int
。当然,您可以使用 typedef 来避免这种情况:
typedef int* IntPtr;
IntPtr ptr1, ptr2;
现在两者都是int*
。为避免由此引起的混淆,您应该避免使用像这样的指针类型声明多个变量(或至少使用 typedef 变体以使其清晰)。
如果你只有一个变量,就像其他人已经说过的那样,这几乎是一个品味问题。
要么您想将所有类型信息分组到一个位置(int* var
),要么您想强调变量是一个指针(int *var
)。
他们的意思是一样的。这是个人喜好的问题。