C语言-逗号运算符/表达式

逗号运算符
    逗号运算符是所有运算符中级别最低的,遇到逗号运算符表示运算结束;
    int i=0;
    int j=(i++,i++,i++);
    printf("i=%d,j=%d\n", i,j);//i=3,j=2;i++遇;才算结束

    i=0;
    int k=(i++)+(i++)+(i++);
    printf("i=%d,k=%d\n", i,k);//i=3,k=0
    
    int a=10;
    int b;
    int num = (a = 19, b = 10, a + 1);
    printf("a=%d,b=%d,num=%d\n", a,b,num);//a=19,b=10,num=20    
    
逗号表达式
    这种类型的运算符成为逗号表达式,又称为“顺序求值运算符”。 
    int a=10;
    a = 3 * 5, a * 4;
    printf("%d\n", a);//15;把a = 3 * 5作为一个整体,是一个赋值语句;后面a * 4是另外一个语句;
    
    a=10;
    printf("%d\n", (a = 3 * 5, a * 4));//60;括号内是一个整体,它的值是最后一个表达式的值,先运行得出a=15,后运算15*4=60;

    a=10;
    printf("%d\n", a = 3 * 5, a * 4);//15;这里的逗号是作为参数的分隔作用,a=15,后面的a * 4没有打印;
    
    a=10;
    printf("%d,%d\n", a = 3 * 5, a * 4);//15,40;
    这个涉及到参数求值顺序的问题,有的编译器是从左到右求值,你的编译器是从右到左求值的;
    我的编译器是从右到左求值的,所以打印出上面的值。
    
    a=10;
    printf("%d,%d\n", a * 4, a = 3 * 5);//60,15;交换顺序后就能确认是从右到左求值的;

扩展

  1、

    int m=6;

    if(m++ > 6) 在if括号后语句结束,里面的m++会自加然后m值为7,括号内的m值还是为6。

  2、下面打印出什么?

    int a[3][2]={(0,1),(2,3),(4,5)};

    int *p=a[0];

    printf("%d",p[0]);

    打印出1,因为是逗号表达式,所以二维数组a的排列是:1,3,5,0,0,0; 所以打印出1。

    

猜你喜欢

转载自blog.csdn.net/TSZ0000/article/details/82885086