http://blog.csdn.net/edwzhang/article/details/7221850 2012 當(dāng)指針、自增(++)或者自減(--)運算符,,以及*這三個 運算符在同一個語句時,,要注意++的作用點在哪里。
測試代碼: #include <stdio.h> int main() { int i[] = {100, 200, 300, 400, 500}; printf("...%d\n", *p++); return 0;
測試結(jié)果: ...100 分析如下: 1. int *p = i; 此時,,指針執(zhí)行數(shù)組第一個元素。 2. printf("...%d\n", *p++); 此時,,由于*和++的運算符優(yōu)先級相同,,而且結(jié)合性是由右至左,因此*p++其實就是:*(p++),。由于此處的++是后繼加,,所以先得到*p為100之后,才會處理++的動作,。所以這個語句先打印出100,,然后將p指向下一地址。 3. printf("...%d\n", *++p); 同理,,這個語句相當(dāng)于: *(++p),。由于此處的++是前置加,所以p指針先移到了下一地址,,再打印出*p的值300,。 4. printf("...%d\n", ++*p); 這個語句相當(dāng)于: ++(*p)。所以++是對*p的值加1,。此語句等同于: *p = *p + 1; 將*p (此時為300)加1,,再放入*p中。
最后,,*p的運算結(jié)果為301,。 |
|