在C ++中声明指针时,我在哪里放置星号是否重要?

时间:2011-03-27 14:37:13

标签: c++ pointers syntax

我只是在学习C ++,而且从我过去几天看过的所有示例代码中我都很难理解指针应该放在哪里。

这3个有什么区别?

1. char* x = /* ... */
2. char *y = /* ... */
3. char * z = /* ... */

或者

1. ClassX* x = /* ... */
2. ClassY *y = /* ... */
3. ClassZ * z = /* ... */

感谢您的帮助。

3 个答案:

答案 0 :(得分:13)

没有区别。它们完全一样。

您可以随意选择书写。通常,C ++程序员将星号放在类型旁边,而C程序员更常见的是将星号放在变量的名称旁边。

唯一需要注意的缺陷就是当你在一行上声明多个变量时(你真的不应该这样做,如果不是因为这个原因)。例如,在以下语句中,只将变量x声明为指针:

char* x, y;

将其与以下内容进行比较,这使得更清楚哪些变量是指针:

char *x, y;

据我所知,第三种语法是两种主要选项之间的差别妥协。有人决定将星号放在中间位置,而不是将星号放在中间位置,而是将它放在所属的唯一位置。

答案 1 :(得分:2)

没有区别,但你必须注意,如果你写:

char* x, y;

只有x是一个指针(声明的第一个变量),你应该这样引用它们:

x = new (char);
*x = 'a';
y = 'b';

答案 2 :(得分:0)

Algough *有时会放在它确实属于类型声明的变量旁边。以下是:

SomeType *x, *y;

真的意味着

SomeType *x;
SomeType *y;

&也是如此。此外,*const&按其接近声明类型的顺序应用。例如:

const SomeType * const *&x = ...;

意味着:引用指向const SomeType的const指针。 const可以放在类型名称之前和之后。类型之前的const在类型之后的所有修饰符之前应用。另请注意,这是不允许的:

const SomeType const x = ...;

因为它本质上意味着const const SomeType,这没有多大意义。