函数执行顺序 打印顺序

来源:互联网 发布:java 协议开发 编辑:程序博客网 时间:2024/06/05 19:10

下列程序的运行结果是( ) 

#include <stdio.h>

main()

{

    struct t

   {

       int x; int *y;

   }*p;

   int a[]={1,2};

   int b[]={3,4};

   struct t c[2]={5,a,6,b};

   p=c;

   printf("%d,%d",*(p->y),++(*p).x);

}


正确答案:1 6

 

解析:

函数执行时形参的执行顺序是从左到右,此题中先执行++(*p).x再执行 *(p->y)

     再考虑运算符优先级:优先级从高到低依次是() .  ++,因此先执行 (*p).x,得到c[0].x,值为5,前++之后得到6

也就是说前++操作是对变量x执行的,不影响p指针的指向,则*(p->y)的结果为*a,a[0],最终结果是1

     形参执行顺序是从右到左,但是printf的打印顺序还是从左到右,因此结果为16

原创粉丝点击