为什么在打印语句之前调用函数?

时间:2014-12-25 16:48:25

标签: c function printf

 #include<stdio.h>
 int func(int x){
   printf("Print\n");
   return x;
 }
 void main(){
   printf("The value of x is %d",func(50)); /* Print is printed first then the value of x */
   return 0;
 }

该计划的输出是:

Print
The value of x is 50

所以我的问题是为什么功能打印Print之后打印The value of x is 50。自从在语句之后调用函数之前,为什么The value of x is没有打印。

2 个答案:

答案 0 :(得分:4)

让我们分析一下您的计划流程。

    正在调用
  1. main()

  2. 正在调用
  3. printf()

    2.1在评估printf()的参数时,遇到func(50)函数调用

    2.2 func(50)函数开始执行。它打印Print并返回x [50]

  4. 最后,printf()中的main()看起来像printf("The value of x is %d",50); [50是函数调用的返回值func(50)]

  5. 发生第二次打印,打印The value of x is 50

  6. 所以,你的输出屏幕看起来像

    Print
    The value of x is 50
    

    注意:正如评论中已提到的,请使用int main()代替void main()。否则,return 0毫无意义。

答案 1 :(得分:1)

func(50)

是函数printf()的参数,因此参数首先执行,而%d的第一个参数中的printf()需要一个需要打印的值,并且由第二个agrument。 因此,函数调用func(50)首先从函数Print打印func(),然后printf中的main()执行。

printf("The value of x is %d",func(50));

func(50) - &gt;打印Print并返回50

所以现在main()中的printf()看起来像:

printf("The value of x is %d",50);

最终打印

Print
The value of x is 50