结构指针上的前/后增量运算符

时间:2015-07-25 11:31:39

标签: c

我是C的新人 没有得到这里发生的事情

struct person {
    int age;
};

main ()
{
    struct person p , *ptr;
    ptr = &p;

  printf ("%d \n" , ++ptr->age );
  printf("%d" , ptr++->age);

  return 0;
}
  

两个printf语句如何打印1?

1 个答案:

答案 0 :(得分:2)

此表达式

++ptr->count;

相当于

++( ptr->count );

因此它会增加count指向的结构的数据成员ptr

表达式->中的

运算符++ptr->count是一个后缀运算符,其优先级高于任何一元运算符,包括预增量运算符++

在此表达式中

ptr++->count;

有两个后缀运算符:后增量运算符++和运算符->。它们从左到右进行评估。后增量运算符++的值是递增前其操作数的值。因此,此表达式返回count在递增之前指向的结构的数据成员ptr的值。指针本身会递增。

根据C标准(6.5.2.4后缀增量和减量运算符)

  

2 postfix ++运算符的结果是操作数的值。   作为副作用,操作数对象的值递增(即   是,相应类型的值1被添加到它)....