我注意到在C++中,指针可以使用两种不同的缩进方式声明(如果这是我要找的正确单词):
//Space followed by asterisk with variable name
char *pointer;
//Asterisk followed by space and then variable name
char* pointer;
星号的位置会影响指针吗?如果会,那么在什么情况下需要使用一种缩进方式而不是另一种呢?
不,空格对指针声明没有影响,但C/C++语法中存在一个bug(实际上官方称其为特性,但我不知道有谁喜欢这种行为),这是该声明:
char* pointer, pointer2;
变量 pointer
的类型为 char*
,变量 pointer2
的类型为 char
。因此,许多人更喜欢将其写成
char *pointer, *pointer2;
char *pointer, not_pointer;
为了更清晰地表达,"pointerness" 是名称的一部分,而不是类型。int i = 10, *ptr = &i
。它能够工作是因为指针是复合类型:虽然你可以在声明中拥有多个复合类型(指针、引用),但你不能拥有不同的类型。但这是否会误导人呢?是的。 - edmzchar *pointer;
与以下代码等效:
char * pointer;
int i = 1, *pi = &i;
^^^ ^^^^^^^^^^^^^^^ -- list of declarators
`- base type
内部:
int* p1, p2; // p1 is a pointer, while p2 is an int
int *p1, p2; // same as above
char* pointer, notApointer;
就我个人而言,我强烈不喜欢一次声明多个变量,所以我更喜欢char* pointer;
。 - JSFchar *
不是一个标记,而且*pointer
也不是一个标记,所以它们必须都等同于这四个标记:char
、*
、pointer
、;
。 - David Schwartz