我没有能力去翻那些英文文档,我百度不到满意的结果,我自己测试了一下,得出了下面的答案
如果一个”对象”可以出现在等于号的左边,这个对象就可以使用加加减减运算符(++,--)
- #include <stdio.h>
- int main(void)
- {
- int a = 0;
- a = 100;
- a++;
- return 0;
- }
复制代码
因为 a = 100;
变量a出现在了等于号的左边,所以a可以使用++运算符
所以a++;是正确的
- #include <stdio.h>
- int main(void)
- {
- int a = 0;
- int b = 0;
- int c = 0;
- c = (a + b);
- (a + b) = c;
- (a + b)++;
- return 0;
- }
复制代码
(a + b) 只能出现在等于号的右边,所以(a + b)++;是错误的
- #include <stdio.h>
- int main(void)
- {
- int a = 0;
- void *p = &a;
- (int *)p = 0;
- return 0;
- }
复制代码
vs下可以通过编译,gcc下无法通过编译
- #include <stdio.h>
- int main(void)
- {
- int a = 0;
- int b = 0;
- void *p = &a;
- (int *)p = 0;
- (a + b)++;
- return 0;
- }
复制代码
- C:\VisualStudioProjects\C\C>gcc main.c
- main.c: In function 'main':
- main.c:9:11: error: lvalue required as left operand of assignment
- (int *)p = 0;
- ^
- main.c:10:9: error: lvalue required as increment operand
- (a + b)++;
复制代码
也就是说gcc把(int *)p当成是只能出现在等于号右边的“对象”,和(a + b)一样只能出现在等于号右边,所以(int *)p不能使用++,--运算符
我得出的结论,没有去翻那些官方资料^_^
如果一个”对象”可以出现在等于号的左边,这个对象就可以使用++,--运算符