星号的位置会影响指针吗?

时间:2015-12-01 19:42:30

标签: c++ pointers

我注意到在C ++中,可以使用两种不同类型的缩进来声明指针(如果这是我正在寻找的正确单词):

//Space followed by asterisk with variable name
char *pointer;

//Asterisk followed by space and then variable name
char* pointer;

星号的位置会影响指针的任何内容吗?如果是这样,在什么情况下我需要使用一种类型的缩进而不是另一种?

4 个答案:

答案 0 :(得分:9)

没有whitespacing对指针声明没有任何影响,但是C / C ++语法中有一个错误(好吧,正式是它的一个特性,但我不知道有谁喜欢这个行为),这个声明

char* pointer, pointer2;

pointer的{​​{1}}类型char*pointer2类型char。因此,很多人喜欢把它写成

char *pointer, *pointer2;
char *pointer, not_pointer;

更清楚,“指针”是名称的一部分,而不是类型。

答案 1 :(得分:3)

不,星号位置对指针的声明没有影响。

答案 2 :(得分:3)

只要星号位于类型后面和变量名称之前,间距就没有效果:

char *pointer;

与:

相同
char      *             pointer;

答案 3 :(得分:0)

在像指针这样的复合类型中,asterix(类型修改)是声明符的一部分。实际上,声明是由以下形成的:。

int i = 1, *pi = &i; 
^^^ ^^^^^^^^^^^^^^^ -- list of declarators 
 `- base type   

在上面我是一个int,它是一个指针

在:

int* p1, p2; // p1 is a pointer, while p2 is an int
int *p1, p2; // same as above