我不能完全理解我写作时语言的作用
*(t++)
*t++
当t
是指针时?
答案 0 :(得分:4)
这两个表达
*(t++)
*t++
由于运算符优先级,是等效的。
因此,后缀运算符++的优先级高于一元运算符*。
后缀运算符++的结果是递增前其操作数的值。
来自C标准(6.5.2.4 Postfix递增和递减运算符)
2 后缀++运算符的结果是操作数的值。 作为副作用,操作数对象的值递增(即 是,相应类型的值1被添加到它)....
考虑到由于指针运算,如果你有一个像这样的指针
T *p;
其中T
是某种类型,然后在操作p++
之后,指针本身的最终值增加值sizeof( T )
。对于char sizeof( char )
类型,始终等于1
。
考虑以下示范计划。
#include <stdio.h>
int main(void)
{
char *t = "AB";
printf( "%c\n", *t++ );
printf( "%c\n", *t );
return 0;
}
它的输出是
A
B
您可以替换此声明
printf( "%c\n", *t++ );
此声明
printf( "%c\n", *( t++ ) );
你会得到相同的结果。
实际上是这个表达式
*(t++)
也等同于表达式
t++[0]
答案 1 :(得分:2)
两个表达都是等价的。
后缀增量运算符++
的优先级高于解除引用运算符*
。因此,*(t++)
和*t++
执行相同的操作。即,指针t
递增,并且在递增之前t
的原始值被解除引用。