您最喜欢的声明指针的方法是什么?
int* i;
要么
int *i;
要么
int * i;
要么
int*i;
请解释原因。
int*i;
-空格不会在树上生长,您知道...
您最喜欢的声明指针的方法是什么?
int* i;
要么
int *i;
要么
int * i;
要么
int*i;
请解释原因。
int*i;
-空格不会在树上生长,您知道...
Answers:
如果您写:
int* i, j, k;
您会误导我说i,j和k都是指向的指针int
。
因此,我认为将*附加到变量名上是更好的选择。
int * i;
是一个非竞争者,因为它乍一看就像乘法。
int*
被视为一种类型,并且int* i, j
确实声明了两个指针。该问题可能被认为是不完整的-它取决于您所使用的语言,哪些样式是合理的。在CI中int *x
,在C#中,否则执行其他操作。
我更喜欢,int* i
因为i
它的类型为“指向int的指针”,并且我认为这使其与类型系统一致。当然,当试图在一行上定义多个指针时(即,需要在每个变量名称前加上星号以声明一个指针),就会出现一种众所周知的行为,但是我只是不以这种方式声明指针。另外,我认为这是C风格语言的严重缺陷。
*i
是一种int
。
对于C,我们不十分关注类型,我更喜欢:
int *i;
因为它在上有一个重点int
,而不是指针。什么是int
?*i
是int。
int i = 5
,要获取的值i
,请使用name i
。同样,如果您拥有int *i; *i = 5
,那么您可以使用获取值*i
。
我已经首选int* i
了多年。但是,有一个很强的论据,int *i
因为使用前一种样式时,您仍然必须记住多重声明规则:
int* a, *b; // not int* a, b;
因为您必须记住该规则,所以您不会简单地获得任何收益,但是我也不会说它更复杂。避免在一行上进行多个声明只是表达您记住此规则的另一种方式。两种风格之间的区别是没有意义的。
但是,即使在我使用它时,通过将星号放在类型旁边而不是在语法上绑定到的变量旁边,假装C声明语法的工作方式还是有点愚蠢。
我不买成一个强调指针类型(i
),而其他强调int类型(的*i
),但是这可能是15年后的C和C ++使用的,它只是是,当我看着它,没有不得不考虑它。–大多数问这个问题的初学者都无法做到。
同样,即使给了我偏好,我也不觉得以其他方式读取/编写代码很尴尬。一致性,bla bla blah。
甚至无需提及int * i
。
我更喜欢int* i
(C ++风格)。
由于产生的视觉歧义(int* i, j
),我避免在一个语句中声明多个变量。
另请参阅Bjarne Stroustrup的C ++样式和技术常见问题解答以了解基本原理。
如果要声明多个变量但不想重复星号:
template <typename T>
struct pointer_to
{
typedef T* type;
};
pointer_to<int>::type p1, p2, p3;
(正如您在struct模板中看到的那样,我更喜欢这种int* i
样式。)
这是一个更通用的解决方案:
template <typename T>
struct identity
{
typedef T type;
};
identity<int*>::type p1, p2, p3;
这适用于任何“问题类型”,例如数组和引用:
identity<int[10]>::type a1, a2, a3;
identity<int&>::type r1(*p1), r2(*p2), r3(*p3);
typedef int* int_ptr
本来可以做到的。当然,我必须为不同的指针类型声明一个新的typedef,但是实际上有多少个呢?最多八个?
我会继续,int* i;
因为第一部分表示变量类型(指向int的指针),而第二部分表示名称(i
)。对我来说,类型是int
,名称是,这是没有意义的*i
。另外,int * i;
对我来说看起来有点像乘法。
在我使用的声明中int * i;
,您将其读取为i is a pointer to an integer
。
指针对类型和变量都起作用,因此它应该位于中间。
最好避免在同一行上声明多个内容: int * i, j;
C中没有指针类型!因此,“ int *”没有任何意义。星号始终绑定到其右写的元素,它属于其右写的元素。“ * i”是一个整数。并且由于* i是一个int,因此得出i是一个指向int的指针。这就是背后的逻辑,这就是为什么“ int * i”是唯一可能的解决方案的原因。其他一切都是幻觉(在大多数情况下,编译器会自动对其进行纠正)。在C ++和C#中是不同的。但是对于C,只有一本圣经:“ Dennis M. Ritchie:C编程语言”。丹尼斯(RIP!)写道:“ int * i”。无需质疑。
int*
是指针类型。