簡體   English   中英

++ * argv,* argv ++,*(argv ++)和*(++ argv)之間的區別

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM