在C/ c++中声明指针变量的正确方法

Correct way of declaring pointer variables in C/C++

本文关键字:变量 方法 指针 声明 c++      更新时间:2023-10-16

我注意到有些人使用下面的符号来声明指针变量。

(a) char* p;
不是

(b) char *p;

我用(b)。符号(a)背后的理性是什么?符号(b)对我来说更有意义,因为字符指针本身不是一种类型。类型为字符,变量可以是指向该字符的指针。

char* c;

看起来有一个char*类型,变量c也是这个类型。但实际上类型是char,而*c (c所指向的内存位置)就是这种类型(char)。如果一次声明多个变量,这种区别就很明显了。

char* c, *d;

这看起来很奇怪。c和d都是指向字符的同一类型指针。因为下一个看起来更自然。

char *c, *d;

Bjarne Stroustrup说:

选择"int* p;"answers"int *p;"不是关于对与错,而是关于风格和重点。C强调表达;宣言常常被认为是一种必要的罪恶。另一方面,c++非常强调类型。

典型的C程序员写入"int *p;"并解释说"*p是什么"。强调语法,并且可以指向C(和c++)声明语法来论证样式的正确性。实际上,在语法中,*绑定到名称p。

典型的c++程序员写入"int* p;"并解释了为什么p是一个指向整数的指针强调类型。p的类型确实是int*。我显然更喜欢强调这一点,并且认为它对于很好地使用c++的更高级的部分很重要。

来源:http://www.stroustrup.com/bs_faq2.html空白

我推荐后一种风格,因为在你在一行声明多个指针的情况下(你的第四个例子),有星号的变量将是你习惯的。

我个人更喜欢将*与其他类型

放在一起
char* p;  // p is a pointer to a char.

人们会争辩说"但是char* p, q;会误导人",对此我说,"所以不要这样做"。

怎么写没有区别。但是如果您想在一行中声明两个或多个指针,最好使用(b) variant,因为它很清楚您想要什么。看下面:

int *a;
int* b;      // All is OK. `a` is pointer to int ant `b` is pointer to int
char *c, *d; // We declare two pointers to char. And we clearly see it.
char* e, f;  // We declare pointer `e` and variable `f` of char type.
             // Maybe here it is mistake, maybe not. 
// Better way of course is use typedef:
typedef char* PCHAR;
PCHAR g, h;  // Now `g` and `h` both are pointers.
// If we used define construction for PCHAR we'd get into problem too.

妥协是

char * p;

K&R使用

char *p;

这取决于你,除非你遵循编码标准——在这种情况下,你应该遵循其他人的做法。

这完全是个人偏好的问题,在我个人看到char*的项目中,我倾向于在单独的行上声明多个指针。没有真正"正确"的方法来做到这一点,这一切都归结为偏好。有人说(a)更容易读懂,而另一些人说(b)更容易在同一行声明更多相同类型的变量。

我发现(b)更常见,在某些情况下我看到过

char * a;

之类的。再一次的偏好。只要你觉得合适或者我正在做的项目用什么我就用什么(除非是我自己写的)