栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言printf参数的执行顺序问题

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言printf参数的执行顺序问题

        刷题时遇到printf,关于这个顺序之前还没注意过,经过一番测试,得到下面的结论,欢迎指点讨论。

 

int main(void)
{
    int arr[] = { 6, 7, 8, 9, 10 };
    int* ptr = arr;
    *(ptr++) += 123;
    printf("%d %d %d %d", *(ptr++), *ptr, *(ptr++),*ptr);


    int m = 0;
    printf("nnn%d %d %d %d %dn",m, m++,m,++m,m++);


    return 0;
}

第一:printf从右往左执行。之前的ptr指向arr[1]=7;

第二:最右侧*ptr不需要执行,直接保持不变,*ptr;

        第二个,先引用,后++;所以解引用得到的值为7;(ptr指向arr[2]了);

        第三个,同第一个,不变,就是*ptr;

        第四个,先引用,后++;得到的值为arr[2]=8;(ptr指向arr[3]了);

        然后,得到的是8,*ptr,7,*ptr。执行完第四步,ptr指向arr[3]=9;

        所以,输出8 9 7 9;

第三:道理同上,

        最右侧 取得值为0;(m=1了)

        第二个,m;(m=2了);

        第三个,m;

        第四个,取得值为2,(m=3了);

        第五个,m;

最终,m,2,m,m,0;        这时m=3;

所以输出,3 2 3 3 0;

结论就是,从右往左执行,有需要先取值后执行的,直接就获得值。其余的都是执行完以后,统一取值。

感觉好无聊,谁会这么写代码。。。

(来自VS2019,如有误请指导)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1033326.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号