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

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

没有区别

这是一个符号问题 ,而不是语义问题 。 第二个是误导性较小 ,因为

 int *a, b; 

显然是声明了一个int*和一个int ,而

 int* a, b; 

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

这是一个很好的问题。

  • int* p

    • 被C ++程序员广泛使用
    • int* p, q错误地暗示pq都是指针(导致优先在两行上声明这一点,这也提高了分配时的可读性,并且更容易快速剪切/粘贴或注释特定的行/变量)
    • int* p视觉上将类型与标识符分开
    • *p然后明确地指示取消引用(假设您在二进制operator*周围放置空格operator* ala 2 * 3
    • 在C ++中...&x显然是在取一个地址,而...& x必须声明一个引用变量,并且... & ...是按位AND运算符
  • 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 

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

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

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

声明单个指针时,这两个声明是等效的。 有关此更多信息,请参阅链接

那2个声明完全一样!