(1)书写:
①
int i; i=(i=3*5,i*4); printf("%d ",i);
i=60;
②
int i; i=i=3*5,i*4; printf("%d ",i);
i=15;
③
int i; i=3*5,i*4; printf("%d ",i);
i=15;
发现了吗,因为赋值优先级比逗号表达式高,所以①中括号内的表达式先进行i=15的操作,再进行i*4;
而如果如②和③,根本没有括号括起,逗号表达式2是没有意义的;
(2)使用:
1、从左到右逐个计算;
2、最后一个表达式的值是最终值;
#问题Ⅰ:(1)③中的逗号表达式2是否会进行呢?
其实我觉得这个问题没有正确的解答,因为它根本不会对哪一个值产生影响,它只是一个算术表达式,所以看下面这个例子:
int x,y,z; z=x++,y++,++y; printf("%d %d %d ",x,y,z);
显然x=2,y=3,z=1;
3、逗号表达式多用于for语句中;
#问题Ⅱ:逗号表达式中有没有序列点(Sequence Point)?
我想知道上例中逗号表达式中间的y++执行完以后,++y执行之前的y究竟有没有自增,但是苦于没有想到方法,估计要用到汇编窗口吧。故而再翻阅了了一些序列点的资料,暂且得出了一个答案:有,正因为有序列点,才能保证逗号表达式自左向右的运算顺序;
看来其中学问还是很多的,所以接下来考完试需要继续深挖Sequence Point和Side Effect。