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