user-0 提问: 关于指针的定义格式

回复:
user: user-1
content: 这个是编程规范 你搜下编程规范，那里有讲

user: user-2
content: *可以:1,紧挨着变量类型，如 int*   p; 2,紧挨着变量，如 int   *p; 3,两个都不挨着，也是可以滴，如 int   *   p;

user: user-3
content: 引用 5 楼 mujiok2003 的回复:加空格只是为了代码便于人阅读， 编译器不需空格。 恩……，这个重点

user: user-4
content: 都一样的。。

user: user-5
content: 两种方式都是对的，编译器都支持。一般编程规范都推荐*号挨着指针变量，为的是避免在一行定义多个指针变量时不小心出错，例如： int   *p,q; // 这样读起来容易识别q是整形变量不是指针 int*  p,q;  // 这样比较容易误解p和q都是指针

user: user-6
content: 这两种情况对于编译器来将是一样的，只是让阅读你代码的人看起来更爽一些。比如 int *p, q; 和 int* p, q;  这两种定义都是p为int类型指针， q为int类型，阅读你代码的人可能会把第二种情况的p和q误解释为int 类型指针。

user: user-7
content: 加空格只是为了代码便于人阅读， 编译器不需空格。

user: user-8
content: 从语法上来说，* 挨着变量是比较容易理解的。 以 int * p; 为例  int 是 type-specifier -> declaration-specifiers *p 是 declarator -> init-declarator -> init-declarator-list  3.5 DECLARATIONS  Syntax            declaration:                   declaration-specifiers init-declarator-list<opt> ;            declaration-specifiers:                   storage-class-specifier declaration-specifiers<opt>                   type-specifier declaration-specifiers<opt>                   type-qualifier declaration-specifiers<opt>            init-declarator-list:                   init-declarator                   init-declarator-list ,  init-declarator             init-declarator:                   declarator                   declarator =  initializer ================ 3.5.2 Type specifiers  Syntax            type-specifier:                   void                   char                   short                   int                   long                   float                   double                   signed                   unsigned                    struct-or-union-specifier                   enum-specifier                   typedef-name  =========================== 3.5.4 Declarators  Syntax            declarator:                   pointer<opt> direct-declarator            direct-declarator:                   identifier                   (  declarator )                    direct-declarator [  constant-expression<opt> ]                     direct-declarator (  parameter-type-list )                    direct-declarator (  identifier-list<opt> )            pointer:                   *  type-qualifier-list<opt>                   *  type-qualifier-list<opt> pointer            type-qualifier-list:                   type-qualifier                   type-qualifier-list type-qualifier            parameter-type-list:                   parameter-list                   parameter-list , ...            parameter-list:                   parameter-declaration                   parameter-list ,  parameter-declaration            parameter-declaration:                   declaration-specifiers declarator                   declaration-specifiers abstract-declarator<opt>            identifier-list:                   identifier                   identifier-list ,  identifier

user: user-9
content: 楼上说的都很对！

user: user-10
content: 靠哪一个都行了，或者两个都不靠也可以。  但是，如果一行定义多个变量的话，*靠近变量可能更容易理解。  比如下面等价的写法  int *p1, i1; int* p1, i1;  或   int *p1, *p2, i1, i2, *p3, i3; int* p1, * p2, i1, i2, * p2, i3;

user: user-11
content: 两种都对，只是书写不同，编译器认为是一样的

user: user-12
content: 都可以 各种风格而已

user: user-13
content: 引用 6 楼 zhuimengfuyun 的回复:这两种情况对于编译器来将是一样的，只是让阅读你代码的人看起来更爽一些。比如 int *p, q; 和 int* p, q;  这两种定义都是p为int类型指针， q为int类型，阅读你代码的人可能会把第二种情况的p和q误解释为int 类型指针。  所以不建议在一个声明中一起写两个以上的变量。。。

user: user-14
content: 季经贴