int*p和int*p声明之间的区别

kar*_*hik 12 c

你能告诉我int* pint *p声明之间的区别吗?

Meh*_*dad 35

没有什么区别.

这是符号而非语义的问题.第二个是误导性较小,因为

int *a, b;
Run Code Online (Sandbox Code Playgroud)

显然声明一个int*int,而

int* a, b;
Run Code Online (Sandbox Code Playgroud)

看起来好像它正在宣布两个指针,当它真的像上面那样做.


Ton*_*roy 18

这是一个很好的问题.

  • int* p

    • 被C++程序员广泛使用
    • int* p, q错误地暗示了这两个pq的指针(通往偏爱宣布此两行,这也提高了可读性,当有任务,并使其更容易快速地剪切/粘贴或发表评论的特定行/变量)
    • int* p 在视觉上将类型与标识符分开
    • *p然后明确表示取消引用(假设你把空间周围的二进制operator*ALA 2 * 3)
    • 在C++ ...&x中显然需要一个地址,同时...& x必须声明一个引用变量,并且... & ...是按位运算符
  • int *p

    • C程序员广泛使用
    • int *p, q清楚地反映出p是一个指针,而q不是存在.
    • int *p 视觉上将类型与标识符混淆
    • 在视觉上无法区分指针解除引用(无论好坏)

类似地出现在函数声明中...

int* f(), g();  // declares int g();
int *h(), (*i)();  // i is pointer to function returning int
int *const*m(), n(); // m returns pointer to (const-pointer to int)
                     // n returns int
Run Code Online (Sandbox Code Playgroud)

...但至少函数参数不能如此毛茸茸 - 类型规范在每个逗号分隔符后重新开始.

总而言之,int *p如果您的编码样式/代码库在单行源代码上使用多个声明,则会更好,否则会int* p提供更清晰的类型分隔和以下标识符.

尽管如此,人们的偏好主要取决于他们习惯的东西.