直接看代码
#include<stdio.h>
#define DISPLAY printf("a=%d i=%d\n", a, i);
int main() {
int i = 0;
int a = 0;
/*逗号表达式:每个表达式都计算,括号内取最右边的值(最后计算)
无括号时取最左边的值(赋值语句从右到左)
当表达式内部都是常量时没有意义,但有变量时可以改变变量的值(比如循环中多次反复)。*/
i = 0, a++;//取左边,右边也计算。
DISPLAY//a = 1 i = 0;
while (i++, i < 5)//取i<10, i++也执行
printf("%d只眼睛%d条腿\n", 2 * i, 4 * i);
/*++ -- 问题*/
i = 0;
a = 0;
i++;//i=i+1;
a--;//a=a-1
DISPLAY//a=-1 i=1
++i;//i=i+1;
--a;//a=a-1
DISPLAY//a=-2 i=2
i = 0;
a = i++;//相当于a=i; i=i+1;
DISPLAY//a=0 i=1
i = 0;
a = ++i;
DISPLAY//a=1 i=1
i = 0;
a = i--;//a=i; i=i-1;
DISPLAY//a=0 i=-1
i = 0;
a = --i;
DISPLAY//a=-1 i=-1
i = 0;
a = 0;
++a = i;//相当于a=a+1, a=i;
DISPLAY//a=0 i-0;
/*
a++ = i;
错误语法!赋值语句左边需要一个左值,而非表达式;
左值(lvalue(location)可在内存寻址的(变量的标识符,即地址)
右值(rvalue(read)可读的(变量的值),不可寻址的(常量)
*/
a = i += 1;//i=i+1 a=i;
DISPLAY//a=1 i=1
a = i = i + 1;//从右到左,等式三边相等。
DISPLAY//a=2,i=2;
i = 0;
return 0;
}