a---b;
y = x/*p /* p指向除数*/;
这种语句如何理解?
打个比方,当C编译器读入一个字符'/'后又跟了一个字符'*',那么编译器就必须做出判断: 他们是一个合起来的符号还是分开的符号。
C语言对这个问题的解决方案可以归纳为一个很简单的规则 :每一个符号应该包含尽可能多的字符,也就是说,编译器将程序分解成符号的方法是,从左到右一个字符一个字符地读入,如果该字符可能组成一个符号,那么再读入下一个字符,判断已经读入的两个字符组成的字符串是否可能是另一个符号的组成部分。
如果可能组成,将继续读入下一个字符,重复上述判断,直到读入的字符组成的字符串已不再可能组成另一个有意义的符号。这就是“贪心法”
注意:除了字符串与字符常量,符号的中间不能嵌有空白,制表符换行符
所以根据以上所说很容易判断出:
a---b 与表达式 (a --) - b 的含义是一样的
而y = x/*p /* p指向除数*/;
实际上,/*被吧编译器理解为一段注释的开始,编译器将后面的看成是注释,直至*/的出现,也就是说该语句的最后结果是吧x的值赋给y,
如果要改成本意的话,应该改成
y = x / *p /* p指向除数*/;
就是在/和*中间加空格,或者
y = x/(*p) /* p指向除数*/;
这样级更加清楚了
这个在C陷阱与缺陷里写的比较详细