zoukankan      html  css  js  c++  java
  • 5-2-2 printf参数从右往左压栈

    5-2-2 C中printf计算参数时是从右到左压栈的

    #include <stdio.h>
    int main (int argc, char **argv)
    {
        int b = 3;
        int arr[] = {6,7,8,9,10};
        int *ptr = arr;
    //    *(ptr++) += 123;
    //    printf ("%d,%d
    ",*ptr,*(++ptr));
        printf ("%d,%d
    ",*ptr,*(ptr++));
        return 0;
    } /* ----- End of main() ----- */
    
    输出
    7,6
    关于
    *(ptr++)执行的先后顺序:我一开始认为:由于括号优先,因此先执行括号中的自加,再取值。

    可实际上是:先取ptr指向的数组元素的值,再自加。并且去掉括号即*ptr++,它的结果完全相同。

    #include <stdio.h>
    int main (int argc, char **argv)
    {
        int b = 3;
        int arr[] = {6,7,8,9,10};
        int *ptr = arr;
        *(ptr++) += 123;
        printf ("%d,%d
    ",*ptr,*(++ptr));
    //    printf ("%d,%d
    ",*ptr,*ptr++);
        return 0;
    } /* ----- End of main() ----- */
    
    输出
    8,8
    程序运行完后数组arr[]={129,7,8,9,10}。
  • 相关阅读:
    <a>作Form表单提</a>
    图片读写分离
    MSSql ID自动增长删除数据重1开始
    WPF 控件
    Cookies
    MVC页面跳转
    MVC-各种传值方式
    mvc框架下,怎样用cookie实现下次自动登录
    SQL函数说明大全 (转)
    SQL日期(转)
  • 原文地址:https://www.cnblogs.com/zhanbiqiang/p/3995377.html
Copyright © 2011-2022 走看看