是*或&的位置吗?事项?

时间:2011-04-04 21:22:52

标签: c++ pointers

  

可能重复:
  In C, why is the asterisk before the variable name, rather than after the type?
  What's your preferred pointer declaration style, and why?

在C ++中,我看到指针以不同的方式放置。例如,

char* ptr
char * ptr
char *ptr

以上3个例子是否相同? (与&相同)

7 个答案:

答案 0 :(得分:5)

没关系。 (例如,它们是相同的。)你甚至可以在没有任何空格的情况下写char*ptr; 请注意,在一行上有多个声明:char* ptr, noptr;。在这里,第三种语法更加清晰:char *ptr, noptr; 我的规则是避免这种混淆:每行只有一个变量。另一种方法是在没有错过指针的*typedef的情况下做到这一点,例如:

typedef char* CharPtr;
CharPtr ptr1, ptr2; // now both are pointer

虽然那时你需要注意其他事情,比如const ness,所以我坚持上面提到的规则:

typedef char* CharPtr;
const CharPtr p1; // const char* ?? or char* const ??
CharPtr const p2; // char* const ?? or const char* ??
// Eg.: Can't the pointer or the pointee be changed?

(以上所有内容也适用于参考文献&。)

答案 1 :(得分:4)

C人倾向于选择char *p,而C ++人倾向于选择char* p(至少Bjarne会这样做)。编译器不关心空格,你也可以说char * pchar*p

很多人说char* p很危险,因为char* p, q可能会让人感到困惑。原则上这是正确的,但是:

  1. 为了提高可读性,无论如何都不应在一个声明中声明多个名称。

  2. 更重要的是,在C ++中,你应该更喜欢RAII类型而不是原始指针。

答案 2 :(得分:3)

C ++人强调类型,C人强调用法。

所以你在C ++中看到char* x,是因为“x的类型是指向char的指针”。 C ++有一个强大的类型系统,语言在其上。这是 C中的情况。

在C中,您根据要对它们执行的操作声明变量。当你在C中看到char *x时,思考过程是“当你取消引用x时,你得到一个字符”。另一个例子:

char (*f)(int);

读取“当你取消引用f并用int调用它时,你得到一个字符”,即。 f是一个指向函数的指针,该函数接受int并返回char。

答案 3 :(得分:2)

没关系。但是,C ++人倾向于char* ptr,而C人更喜欢char *ptr。这完全取决于个人偏好。

但请注意,char* ptr, noptrptr声明为指针,将noptr声明为char值。

答案 4 :(得分:2)

他们都工作。 char *ptr经常被提倡,因为它使得在这种情况下发生的事情变得更加清晰:

char *ptr, var;

这声明了一个char指针和一个char。

答案 5 :(得分:0)

声明中*&修饰符周围的潜在空格对编译的代码没有影响。

答案 6 :(得分:0)

C ++是一种自由格式语言。所以,在这种情况下,空间并不真正算在内,所有意思都是一样的。