C学习笔记(逗号表达式)

(1)书写:

    int i;
    i=(i=3*5,i*4);
    printf("%d\n",i);

i=60;

    int i;
    i=i=3*5,i*4;
    printf("%d\n",i);

i=15;

    int i;
    i=3*5,i*4;
    printf("%d\n",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\n",x,y,z);

 

显然x=2,y=3,z=1;

 

3、逗号表达式多用于for语句中;

 

#问题Ⅱ:逗号表达式中有没有序列点(Sequence Point)?

我想知道上例中逗号表达式中间的y++执行完以后,++y执行之前的y究竟有没有自增,但是苦于没有想到方法,估计要用到汇编窗口吧。故而再翻阅了了一些序列点的资料,暂且得出了一个答案:有,正因为有序列点,才能保证逗号表达式自左向右的运算顺序;

看来其中学问还是很多的,所以接下来考完试需要继续深挖Sequence Point和Side Effect。

 

posted @ 2018-01-01 11:14  小碧  阅读(534)  评论(0编辑  收藏  举报