++ * argv,* argv ++,*(argv ++)和*(++ argv)之间的区别

目前我正在学习C并试图了解这些说明。 他们真的不一样吗?

++*argv *argv++ *(++argv) *(argv++) 

谢谢!

它是后缀增量运算符,其优先级高于指针去引用运算符,而不是前缀增量。 所以这两个是等价的:

 *p++ *(p++) 

前缀增量具有与*相同的优先级,因此* ++ p递增指针,并且与*(++ p)相同。 此外,++ * p与++(* p)相同。

看看下面的代码。

 main() { int a[4] = { 10,20,30,40}; int *argv = a; t = ++*argv; printf("%d\n",*argv); /* Here *argv is 11 */ printf("%d\n",t); /* Here t is 11 because of pre-increment */ *argv++; /* argv is incremented first ++ has higher priority over "*" */ printf("%d\n",*argv);/* *argv is printed which is 20 */ *(++argv); /* argv is incremented first ++ has higher priority over "*" */ printf("%d\n",*argv); /* *argv is 30 */ *(argv++); /* As explained above the same applies here also */ printf("%d\n",*argv); } 

当您在赋值中使用预增量和后增量运算符(即++ argv和argv ++)时,您必须了解rvalue和lvlue.Like是否将首先递增变量值然后将其分配给LHS或在分配给LHS之后变量值也会增加。括号也会改变优先级。需要理解概念优先级,左值和右值以及指针增量规则。

增量的两个小例子。
提示:为了更好地理解,请尝试将argc想象为1或2。

后递增

在下面的程序中,打印所有参数, 包括程序名称 argv[0]

 int main(int argc, char **argv) { while (argc--) printf("%s\n", *argv++); /* same as *(argv++) */ } 

预增

在下面的程序中, 除程序名 argv[0] 外,打印所有参数。

 int main(int argc, char **argv) { while (--argc) printf("%s\n", *(++argv)); } 

++*argv递增值*argv