2011-04-08 195 views

回答

31

没有区别

这是一个表示法,而不是语义学。二是少误导,因为

int *a, b; 

清楚地声明一个int*int,而

int* a, b; 

看起来好像它是声明了两个三分球,当它真正做上述同样的事情。

+0

很好的解释 – cc4re 2013-06-22 19:32:59

3

这两个声明在声明单个指针时是等效的。对于这个更多看link

17

这是一个很好的问题。

  • int* p

    • 被C广泛使用++程序员
    • int* p, q错误地意味着既pq是指针(导致偏好用于声明此两行上,这也提高了可读性当存在是作业,并且使得更容易快速地剪切/粘贴或评论特定的线/变量)
    • int* p视觉separ茨从标识符
    • *p然后明确地指示取消引用类型(假设你把空间周围的二进制operator* ALA 2 * 3
    • 在C++ ...&x
    • 显然服用而...& x必须声明一个参考变量的地址,并... & ...是按位与运算
  • int *p

    • 广泛使用d by 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提供类型的更清楚的分离和下面的标识符。

对于这一切,人们的偏好很大程度上取决于他们习惯了什么。

0

这两个声明是完全一样的!

相关问题