结构指针上的前/后增量运算符[关闭]

问题描述 投票:0回答:1

我是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?

c
1个回答
2
投票

这个表达

++ptr->count;

相当于

++( ptr->count );

所以它增加了count指向的结构的数据成员ptr

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

在这个表达中

ptr++->count;

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.