*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
C language
. You can follow any responses to this entry through the
comments feed
.