【 C 語言 】*p++ 是對p加1呢?還是對p所指的內容?  

2009年5月30日 星期六 , Posted by 曾easy in

*p++ 會對p加1. 因為
unary operators相同優先權的運算子結合性由右至左


如果要對p所指的內容加1, 請用++*p, 或 (*p)++ 。



範例:










main(){

    int   a[]={1,3,5,7};

    int i;

    int *p;



    printf("\n");

    p=a;

    for(i=0; i< sizeof(a)/sizeof(int); i++){

        printf("%p:(%d), ", p+i, *(p+i));

    }

    printf("\n");



    p=a;

    printf("%d   ",
*p++);       /*1*/

    printf("*p++ ,p=%p\n", p);

#if 1

    p=a;

    printf("%d   ",
(*p)++);     /*對p所指的內容加1, 由於++在運算元後面, 先取值再加1*/

    printf("(*p)++ ,p=%p\n", p);

#endif

    p=a;

    printf("%d   ",
*(p++));       /*3*/

    printf("*(p++) ,p=%p\n", p);



    printf("\n");



    p=a;

    for(i=0; i< sizeof(a)/sizeof(int); i++){

        printf("%p:(%d), ", p+i, *(p+i));

    }



    printf("\n");

}










0xbffff740為a[0]的位址


------------------ 輸出結果 --------------------------------------------










0xbffff740:(1), 0xbffff744:(3), 0xbffff748:(5), 0xbffff74c:(7),

1   *p++ ,p=0xbffff744

1   (*p)++ ,p=0xbffff740

2   *(p++) ,p=0xbffff744



0xbffff740:(2), 0xbffff744:(3), 0xbffff748:(5), 0xbffff74c:(7),









  如果將範例程式的#if 1 改成 #if 0

結果如下, 表示
*p++等於*(p++)結果都是1而且p被加1

------------------ 輸出結果 ---------------------------------------------











0xbfffdc40:(1), 0xbfffdc44:(3), 0xbfffdc48:(5), 0xbfffdc4c:(7),

1   *p++ ,p=0xbfffdc44

1   *(p++) ,p=0xbfffdc44



0xbfffdc40:(1), 0xbfffdc44:(3), 0xbfffdc48:(5), 0xbfffdc4c:(7),










This entry was posted on 2009年5月30日 星期六 at 下午2:48 and is filed under . You can follow any responses to this entry through the comments feed .

1 意見

企鵝  

= = """

2009年6月2日 晚上11:09

張貼留言