• 逗号表达式


    这段程序的运行结果是什么?0么?请看下面的截图
     
    没错,不是0,是1!
    你可能会怀疑:为什么是1不是0?暂且我们不谈这个。
    p=a[0]=&a[0][0]这个想必大家都知道,于是p[0]也就代表着*(p+0)也就是*(&a[0][0]),由*与&互为逆运算可知p[0]就是a[0][0]。
    那么问题来了!a[0][0]是什么?
    很多人可能会以为a[0][0]是0,实则不然。在下图这种情况下
     a[0][0]的确是0,细心观察可以发现两端代码之间的微小差异,没错,就是()与{ }的差别。
    我们在初始化二维数组的时候 ,对同一行的元素都用{ }进行聚合,{ }的作用是划分区域,每个{ }内为一行的元素,此外  { }并不是运算符。而()为优先级一级的运算符,但并不能在初始化二维数组的时候划分每行元素。That is to say...int a[3][2]={(0),(1),(2)};和.int a[3][2]={0,1,2};是完全等价的......
    但是...那个逗号是怎么回事呢!?
    说到这里,就不得不提到一个很容易被我们忽视的运算符“,”了。它叫做逗号运算符,又名顺序求值运算符,在所有的运算符中优先级是最低的(第15级)。由逗号运算符构成的表达式也叫逗号表达式(顺序表达式),形式为
    表达式1,表达式2,……,表达式 n
    在使用的时候,按顺序依次求出表达式1,2,3,......,n的值并取表达式n的值作为整个逗号表达式的值。

    看完了这里想必大家也就明白了为何习题4的结果是1不是0了吧,实际上
    也可以写为int a[3][2]={1,3,5};
    仅仅对a[0][0],a[0][1],a[1][0]分别赋值了1,3,5,其余元素值为0。所以输出a[0][0]的值当然就是1咯~

    另附一道思考题:

    main()
    {
    int x,y,z;
    x=y=1;
    z=x++,y++,++y;
    printf("%d,%d,%d ",x,y,z);



    上述程序的输出结果是:

    正确答案应该是2,3,1

  • 相关阅读:
    Beta阶段团队项目开发篇章2
    Beta阶段团队项目开发篇章1
    Alpha阶段博客链接
    大学生对技术网站需求的调查问卷结果分析
    关于大学生对技术网站需求的问卷调查
    第十。。。三周嘞
    进入第十一周喽
    第十周了耶~
    第九周也要过去啦~~~
    第,八,周,啦
  • 原文地址:https://www.cnblogs.com/mxy2014/p/4146435.html
Copyright © 2020-2023  润新知