我正在学习C ++,在过去的几天里,我查看了所有示例代码,但很难理解指针应该放在哪里。
这3个有什么区别?
1. char* x = /* ... */
2. char *y = /* ... */
3. char * z = /* ... */
或者
1. ClassX* x = /* ... */
2. ClassY *y = /* ... */
3. ClassZ * z = /* ... */
感谢你的帮助。x
被声明为指针:char* x, y;
将其与以下代码进行比较,这让指针变量更加清晰明了:
char *x, y;
据我所知,第三种语法出现是因为在两个主要选项之间做出了不好的妥协。某人决定将星号放在中间,而不是将其放在其中一个旁边,这大概是唯一一个明显不适合放置星号的地方。没有区别,但是需要注意的是,如果您这样写:
char* x, y;
只有x是指针(第一个声明的变量),您应该以这种方式引用它们:
x = new (char);
*x = 'a';
y = 'b';
虽然 *
有时会放在变量旁边,但它实际上属于类型声明。因此,以下代码:
SomeType *x, *y;
真正的意思是
SomeType *x;
SomeType *y;
&
。此外,*
、const
和 &
的应用顺序取决于它们与声明类型的接近程度。例如:const SomeType * const *&x = ...;
这意味着:引用指向常量指针的指针,指向常量 SomeType。 const
可以放在类型名称之前和之后。类型之前的 const
会应用于类型之后的所有修饰符。还要注意,不允许这样做:
const SomeType const x = ...;
const const SomeType
,这没有多少意义。(SomeType *)x;
只能被解释为包含一个强制类型转换表达式的表达式语句,它不能是一个声明,因此你的“真正意思”是不正确的。 - CB Bailey
char*w
;-) - fredoverflowtypedef char *CHAR_PTR; CHAR_PTR w;
... - Mateen Ulhaq