在C/ c++中声明指针变量的正确方法
Correct way of declaring pointer variables in C/C++
我注意到有些人使用下面的符号来声明指针变量。
(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;
之类的。再一次的偏好。只要你觉得合适或者我正在做的项目用什么我就用什么(除非是我自己写的)
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 枚举环境变量的惯用C++14/C++17方法
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 是否可以依赖函数范围的静态变量来执行程序关闭期间调用的方法?
- 从私有成员变量的成员方法返回unique_ptr
- 在派生类中使用基类的私有成员变量的最佳方法
- 打印所有继承的类成员变量和方法
- C++方法中的引用变量
- Visual C++: MSVC vs. GCC+CLANG: 处理 lambda 捕获类成员变量,正确的方法是什么?
- 有没有一种通用的方法来实现不变量
- 有没有将变量名称转换为双指针的简短方法?
- C++:将向量传递到构造函数以创建成员变量的最佳方法?
- C++中变量混叠的最佳方法
- 比较C++变量的最有效方法
- 使用类在C++中存储和列出变量/方法是否是一种好的做法
- 存储变量的更有效方法是什么?
- 对具有相同方法的不同类使用一个变量
- 如何使用另一个变量访问对象的变量/方法
- C++,静态局部变量(方法)与全局(文件)变量有什么区别
- Awesomium允许我在JS中调用/使用c++变量/方法吗?