Pre / Post 结构指针上的递增运算符
Pre / Post increment operator on structure pointer
我是 C 的新手
没明白这里发生了什么
struct person {
int age;
};
main ()
{
struct person p , *ptr;
ptr = &p;
printf ("%d \n" , ++ptr->age );
printf("%d" , ptr++->age);
return 0;
}
How Both printf statements prints 1 ?
这个表达式
++ptr->count;
相当于
++( ptr->count );
所以它增加了ptr
指向的结构的数据成员count
。
表达式 ++ptr->count
中的 运算符 ->
是 postfix 运算符,其优先级高于任何一元运算符,包括预递增运算符 ++
.
在这个表达式中
ptr++->count;
有两个 post固定运算符:post-增量运算符 ++
和运算符 ->
。它们从左到右进行评估。 post-自增运算符++的值是其操作数自增前的值。因此,此表达式 returns 由 ptr
指向的结构的数据成员 count
在其递增之前的值。指针本身递增。
根据 C 标准(6.5.2.4 后缀递增和递减运算符)
2 The result of the postfix ++ operator is the value of the operand.
As a side effect, the value of the operand object is incremented (that
is, the value 1 of the appropriate type is added to it)....
我是 C 的新手
没明白这里发生了什么
struct person {
int age;
};
main ()
{
struct person p , *ptr;
ptr = &p;
printf ("%d \n" , ++ptr->age );
printf("%d" , ptr++->age);
return 0;
}
How Both printf statements prints 1 ?
这个表达式
++ptr->count;
相当于
++( ptr->count );
所以它增加了ptr
指向的结构的数据成员count
。
++ptr->count
中的 运算符 ->
是 postfix 运算符,其优先级高于任何一元运算符,包括预递增运算符 ++
.
在这个表达式中
ptr++->count;
有两个 post固定运算符:post-增量运算符 ++
和运算符 ->
。它们从左到右进行评估。 post-自增运算符++的值是其操作数自增前的值。因此,此表达式 returns 由 ptr
指向的结构的数据成员 count
在其递增之前的值。指针本身递增。
根据 C 标准(6.5.2.4 后缀递增和递减运算符)
2 The result of the postfix ++ operator is the value of the operand. As a side effect, the value of the operand object is incremented (that is, the value 1 of the appropriate type is added to it)....