逗号表达式小试

来源:互联网 发布:数据库零基础教程 编辑:程序博客网 时间:2024/06/06 10:43
//自增表达式作为函数参数时,求值顺序是从后往前://void f(int i, int j, int k)//{//  printf("\n%d %d %d", i, j, k);  //3,2,1//}//void main()//{//  int i = 1;//  f(i, i++, i++);//  printf("\n%d", i);  //  printf("%d  %d  %d  %d", i,i++, i++,i++);//  getchar();//}

这里打印出来的结果是
这里写图片描述

而不是我想象中的3,3,3,3.
原因是因为自增表达式作为函数参数的时候,求值顺序是从后往前的。

void main(){    int a[10] = { 2,0,3,4 };    int *p1 = &a[0], *p2 = &a[1];    printf("%d %d", *p1, *p2);  //2,0    p1 = p1 + 1;  //p1 = &a[1]    *p2 = *p2 + 1;  //a[1] += 1  a[1] = 1    printf("\n%d %d", a[0], a[1]);  //2,1    printf("\n%d %d", *p1, *p2);  //1,1    printf("\n%d %d",(*p1++) * *p2++,(*p2)++);    printf("\n%d", *p2);    getchar();}

这里写图片描述
就如同这个题在最后一步printf(“(p1++) *p2++,(*p2)++”);得到的结果是4和1,一开始想不通,于是我选择分别在前面打印(*p1++)和(*p2++),结果的到确是2和1,明显他们相乘的结果不可能等于4.

原创粉丝点击