zoukankan      html  css  js  c++  java
  • C学习笔记(逗号表达式)

    (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。

  • 相关阅读:
    简单dp总结
    一、极限总结
    最短路径之差分约束
    软工个人总结
    BETA事后总结
    BETA(7)
    BETA(6)
    BETA(5)
    Go 中的字符串相关操作
    Go 中的异常/错误处理
  • 原文地址:https://www.cnblogs.com/dudulukeyxian/p/8166336.html
Copyright © 2011-2022 走看看