[英]Difference between ++*argv, *argv++, *(argv++) and *(++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。例如,變量值是先遞增然后分配給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
遞增。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.