问答详情
源自:1-2 C程序结构

来个大佬给我讲一下

https://img3.mukewang.com/5c795ba00001631913590811.jpg


能看清图吧。我这只有3个printf怎么会输出4给数呢/看不懂了。   还有我记得函数调用它下面的函数需要声明的吧,为什么我试着把函数a和b调换位置也能出结果。    感谢

提问者:qq_狗活_twEPQW 2019-03-02 00:23

个回答

  • qq_南有乔木彡_czHMUW
    2019-03-02 09:35:46
    已采纳

    看了半天。。。b函数调用了两次,a函数里printf函数调用一次b函数,同时返回值也是b函数,在这又调用一次,所以b函数调用了两次,打印了两次“18”。

    第二个问题,调用函数时应该是从主函数外找对应的函数,爱仕达说法娃啊五号if横扫的话发啊过,嗯就是这样(我说的这么严肃你应该懂了吧)

  • weixin_慕粉0463682
    2019-03-02 18:13:33

    真秀


    首先输入数的是5

    应该输出a(5)

    由于不知道a()函数,所以先跳到a()函数

    继续5,应该输出b(5)

    由于不知道b()函数,先跳到b()函数

    继续还是5

    先输出5+13,也就是18

    ..............................

    然后返回5+2,也就是7

    b()函数返回的7是a()函数应该输出的

    也就是输出7

    ...........................

    由于之前传递给b()函数的c=5,而数字5是在b()函数中改变的

    所以对于a()函数来说并没什么卵用

    在a()函数里c的值没有改变

    所以a()函数里,c还是5

    接着返回b(5)

    又回到b()函数了,带来的还是5,

    于是先输出5+13,也就是18

    .................................

    然后返回5+2,也就是7

    然后这个数是由a()函数中的return b(c)提供的

    已经没有后续步骤了,所以7作为最后一个数返回a(e)

    也就是最后a(e)=7,然后输出7+1,也就是8

    ..............................

    所以总的输出了4次



  • qq_南有乔木彡_czHMUW
    2019-03-02 10:33:39

    刚刚刷题时突然意识到,第二个问题的答案。实际上执行程序时是从main函数开始执行,也就是说无论你的自定义函数之间怎么互相调用,在执行时一定时从main函数开始,那么你这些被调用的函数就是在main函数的上面,所以不需要声明

  • qq_南有乔木彡_czHMUW
    2019-03-02 09:21:39

    秀的我头皮发麻