C语言 printf 执行顺序

Posted on 2022-11-24 21:20  梦中千秋  阅读(178)  评论(0编辑  收藏  举报

先看几个例子

#include <stdio.h>

int main()
{
    unsigned a = 16;
    printf("%d,%d,%d", a >> 2, a = a >> 2, a);
    return 0;
}

1,4,4

#include <stdio.h>

int main()
{
    unsigned a = 16;
    printf("%d", a >> 2);
    return 0;
}

4

  • 说明即使后续的运算,将会影响前面的输出

实验

#include <stdio.h>

int main(){
    int b = 2;
    printf("%d,%d", b, b = b + 2);
    return 0;
}

4,4

  • 与预想的一样,输出了4,4
#include <stdio.h>

int main(){
    int b = 2;
    printf("%d,%d,%d", b, b = b + 2, b + 3);
    return 0;
}

4,4,5

#include <stdio.h>

int main()
{
    int b = 2;
    // printf("%d,%d,%d,%d,%d\n", b, b = b + 2, b + 3, b = b + 3, b = b + 1);
    printf("%d,%d,%d,%d\n", b, b = b * 2, b + 3, b = b + 2);
    return 0;
}

8,8,7,8

结论

printf函数中,参数从后往前执行, 赋值语句会改变之前赋值过的值 , 所有带有赋值语句的值相同

例: printf("%d,%d,%d,%d\n", b, b = b * 2, b + 3, b = b + 2);

一个四个打印的参数 , 其中两个带有赋值语句

第二个 b = b * 2 , 第四个b = b+2

从后往前执行:

  • b = b + 2 => b ==4 ==> b 打印变量 b
  • b + 3 => 4+3=7 ==> 7 打印常量 7
  • b = b * 2 => b = 4*2==8 ==> b 打印变量 b 此处将前面的变量b 也改变为8了
  • b => b ==> b 打印变量 b
  • 变量b的值将会统一, 最后一起打印显示数据: 8,8,7,8