svr*_*vrs 17 c pointers declaration indirection
当声明在C指针,有2个(编辑:3)的变体:
变式A:
__CODE__
变式B:
__CODE__
变式C:
__CODE__
声明指针的方式因我阅读的文档类型而异.一些作者似乎偏好某些变体,其他人使用几种变体.
Kei*_*son 15
其他人没有提到的是那个
int *ptr;
Run Code Online (Sandbox Code Playgroud)
更接近于语言语法.
int *ptr;是一个声明,包括:
int,其次是*ptr.(这实际上跳过了许多步骤,但它得到了基本的想法.)
由于声明遵循使用,这意味着*ptr类型int.由此得出的ptr是类型int*.
有人可能会认为这比它更好
int* ptr;
Run Code Online (Sandbox Code Playgroud)
出于同样的原因
x = y+z;
Run Code Online (Sandbox Code Playgroud)
比...更好
x=y + z;
Run Code Online (Sandbox Code Playgroud)
你当然可以写
int* ptr;
Run Code Online (Sandbox Code Playgroud)
并将其读作" ptr是类型int*".而且很多程序员都是这样做的,并且相处得很好(它往往是C++中的首选样式).编译器并不关心你采用哪种方式,任何阅读代码的人都不应该无法理解它.
但无论你选择哪种间距,你都需要了解int *ptr;真正的含义,以便在你看到时
int *ptr, i;
Run Code Online (Sandbox Code Playgroud)
在别人的代码中(你不可避免地会这样),你会立即明白这ptr是一个指针而且i是一个int.
如果您正在与项目中的其他程序员合作,您应该遵循编码标准中的任何现有约定,或者如果没有,那么代码已经编写.我个人更喜欢int *ptr;到int* ptr;,但是使用的这两种风格的混合远比使用任何一个持续恶化.
Joa*_*son 12
两者之间的功能完全没有区别
int* ptr;
Run Code Online (Sandbox Code Playgroud)
和
int *ptr;
Run Code Online (Sandbox Code Playgroud)
你使用哪个是你自己,有多种冲突的编码风格可供选择.
只有当您计划在同一行上声明同一类型的多个变量时才重要.例如,如果需要多个int指针,则需要执行以下操作:
int *a, *b, *c;
Run Code Online (Sandbox Code Playgroud)
从风格上来说,当你只声明一个变量时,这会令人困惑.许多人喜欢看到变量名后跟的类型,并且类型应该是指向int的指针,而不是int,所以他们更喜欢:
int* a;
int* b;
int* c;
Run Code Online (Sandbox Code Playgroud)
无论你喜欢一种形式而不是另一种形式,最终取决于你.在专业编程C的20年中,我看到大约50%的人选择一个而不是另一个.
T *a;
Run Code Online (Sandbox Code Playgroud)
是TKernighan&Ritchie关于C的书中以及ISO/IEC 9899:2018中使用的声明指针的首选C样式.
T* a;
Run Code Online (Sandbox Code Playgroud)
是TStroustrup关于C++的书中使用的声明指针的首选C++样式方式.
两种符号都是等价的.
它们的意思与其他人所说的相同.虽然有一个陷阱等着你.考虑以下代码:
int* a, b;
Run Code Online (Sandbox Code Playgroud)
你可能会认为这是指向的int.不然,不然.事实上a是int*,但是b是int.这是许多C程序员更喜欢将*下一个变量放在变量而不是类型上的原因之一.这样写的时候:
int *a, b;
Run Code Online (Sandbox Code Playgroud)
你不太可能被误导为什么a和b是什么.
说了这么多,许多编码标准坚持要求每行声明不超过一个变量,即e.
int* a;
int b;
Run Code Online (Sandbox Code Playgroud)
如果你遵循每行规则的一个变量,那么肯定没有混淆的余地.