Ski*_*ick 27 c++ string pointers
可能重复:
在C中,为什么变量名前的星号,而不是类型之后?
我现在正在学习C++,而且我遇到了很多以空字符结尾的字符串.这让我思考,在声明指针时更有意义:
char* string
Run Code Online (Sandbox Code Playgroud)
要么
char *string
Run Code Online (Sandbox Code Playgroud)
?对我来说,char*格式更有意义,因为"string"的类型是指向char的指针,而不是char.但是,我通常会看到后一种格式.显然,这也适用于参考文献.
有人可以告诉我,后一种格式是否有合理的原因?
Gre*_*ill 56
在以下声明中:
char* string1, string2;
Run Code Online (Sandbox Code Playgroud)
string1是一个字符指针,但string2只是一个字符.因此,声明通常格式如下:
char *string1, string2;
Run Code Online (Sandbox Code Playgroud)
这使得它*适用于string1但不是更清楚string2.好的做法是避免在一个声明中声明多个变量,特别是如果它们中的一些是指针.
smo*_*smo 35
Bjarne Stroustrup有话要说:
当人们试图用单个声明声明几个指针时,(仅)会产生严重的混淆:
int* p, p1; // probable error: p1 is not an int*
Run Code Online (Sandbox Code Playgroud)
Joh*_*itb 14
从技术上讲,写作是有道理的
char *f
Run Code Online (Sandbox Code Playgroud)
因为*f是声明器,而char声明说明符是指定所有声明符的基本类型.的说明符包含像运营商(),[]并且&其可以被认为修改基本类型的,并且实际的标识符.
我使用上面*的标识符形式,因为它强调*f实际上是声明符,而是char基本类型.
在某种程度上,当运算符应用于标识符时,可以考虑声明符中的修饰符以在声明说明符中生成类型.但它并不总是奏效:
int a, *b, &c = a, d(), e[1], C::*f;
Run Code Online (Sandbox Code Playgroud)
注意如何所有的a,*b,d()和e[1]静态解析为int -从开&c和C::*分别声明(因此需要初始化)的引用和指向类成员.
没有人提到的是以下内容
char *string
Run Code Online (Sandbox Code Playgroud)
也可以读作声明表达式的类型*string(读取:应用于指针的间接运算符string)as char.从这个角度来看,符号是完全合理的.
话虽这么说,我用
char * string
Run Code Online (Sandbox Code Playgroud)
我自己;)
(对于大多数用途,std :: string优于char*.)
我总是把*和类型一起放在char*中,因为正如Stroustrup所说,这强调了类型.
我从不在一行上声明变量,以避免在这里的回答中讨论的常见问题;
char* p, q; // oops, probably not what was meant
// this is mandated by our style guide:
char* p;
char* q;
Run Code Online (Sandbox Code Playgroud)
在 C++ 中,将 * 放在类型标识符(如 char*)处是有意义的,因为它是类型本身的一部分。
但是,如果您在同一个语句中定义多个变量,这会变得含糊不清且具有误导性。
char* foo, bar;
Run Code Online (Sandbox Code Playgroud)
虽然 foo 现在具有 char* 类型,但 bar 具有 char 类型。因此很多人更喜欢
char *foo, bar;
Run Code Online (Sandbox Code Playgroud)
为了澄清这一点。
| 归档时间: |
|
| 查看次数: |
7383 次 |
| 最近记录: |