[有人问到声明中的空白符问题,例如:double *pdouble* p. Mark Brader 将这封邮件回复给了提问者,同时也抄送给我,并允许我在此处包含该回复。]

发件人: Mark Brader
主题: 回复:新手指针问题
消息 ID: <9509101928.AA26628@sqrex.sq.com>
密送: scs@eskimo.com

没有区别;这只是风格的选择。C语言中,标点符号旁边的空格只有在以下四种情况下才重要:

  1. 在字符串字面量内部,例如:" this "

  2. 在字符常量内部,例如:' '

  3. 当它用于阻止两个字符组合成另一个具有不同含义的组合时,例如:

    	x = y / *p;
    
    你不想形成/*注释符号;以及
  4. 在对象式宏(没有参数列表的宏)的定义中,宏名称之后,宏体以一个(字符开头(因此看起来像函数式宏的参数列表),例如:

    	#define X (z)
    
    它定义了X展开为(z),而如果X之后的空格被省略,它将定义X带有单个参数,并展开为无内容的宏。

除了上述例外,您可以自由地在所有标点符号旁边使用或不使用空格,无论哪种方式使程序对读者来说更容易理解。

有些人选择这样写

	double* p;

因为他们认为这样更清楚地表明这声明了p为一个double *。 然而,

	double* p, q;

声明了pdouble *qdouble而不是double *。 所以在这种情况下,这种风格非常具有误导性。 另一种风格

	double *p, q;

对于此声明更清晰,因此大多数人然后在第一个声明中使用它

	double *p;

因为一致性也有助于清晰度。

未发布是因为我想象其他人会说同样的事情。 如果你认为它会有所贡献,请随意发布此内容。

Mark Brader             |  "It's simply a matter of style, and while there
msb@sq.com              |   are many wrong styles, there really isn't any
SoftQuad Inc., Toronto  |   one right style."      -- Ray Butterworth