++a和a++不是左值

#include <stdio.h>  
#include <stdlib.h>    
int main(void){  
    int i=0,j=0;  
    i++ = 10;  
    ++j = 10;  
    return EXIT_SUCCESS;  
}  
 

上面的编译时会出现一下错误:

aplus2.c:6:6: error: lvalue required as left operand of assignment
aplus2.c:7:6: error: lvalue required as left operand of assignment

意思就是等号左侧应该是一个变量

 

书上有这几句话:

前缀和后缀形式的增值操作符都复制一份变量值的拷贝,用于周围表达式的值正是这份拷贝。前缀操作符在进行赋值之前增加变量的值,后缀操作符在进行赋值之后才增加变量的值。

 //不是太明白

对于这几句话,我的理解是:

比如i++ = 10这句,先将i的值进行复制到i++(可以将i++看成值10的别名),然后再对i加1,所以这句语句执行完后,i的值是11,而i++的值是10。

同理,++i = 10这句,先对i加1,然后再将i的值复制到++i(可以将++i看成值11的别名),所以这句语句执行完后,i和++i的值是11。 

++i和i++的结果是i值的拷贝,并不是变量本身,所以无法向一个值进行赋值。

posted @ 2015-06-27 10:23  neteasefans  阅读(305)  评论(0编辑  收藏  举报