示例 7 表达式的分组并不能完全确定它的求值。在以下片段中:
#include <stdio.h> int sum; char *p; /* ... */ sum = sum * 10 - '0' + (*p++ = getchar());
表达式语句被分组,就好像它被写成
sum = (((sum * 10) - '0') + ((*(p++)) = (getchar())));
但是 p 的实际增量可以发生在前一个序列点和下一个序列点( ; )之间的任何时间,并且对 getchar 的调用可以在需要其返回值之前的任何时间发生。
所以基本上我将其理解为未指定的行为-要么*p = getchar(); p++;
OR p++; *p = getchar()
。请注意,这;
意味着一个序列点,但整个表达式中没有其他序列点。
所以这个语法是没用的。而且,对于指针赋值,++ 和 -- 几乎是没用的。正确的?