C 語言一文清楚 ++*p, *p++ 和 *++p 之間的區別

C 語言一文清楚 ++*p, *p++ 和 *++p  之間的區別

寫出下面三個程序的結果:

#include <stdio.h> 
int main(void)
{
\tint arr[] = {10, 20};
\tint *p = arr;
\t++*p;
\tprintf("arr[0] = %d, arr[1] = %d, *p = %d",
\t\t\t\t\t\tarr[0], arr[1], *p);
\treturn 0;
}
/<stdio.h>

結果:

#include <stdio.h> 
int main(void)
{
\tint arr[] = {10, 20};
\tint *p = arr;
\t*p++;
\tprintf("arr[0] = %d, arr[1] = %d, *p = %d",
\t\t\t\t\t\tarr[0], arr[1], *p);
\treturn 0;
}
/<stdio.h>

結果:?

#include <stdio.h> 
int main(void)
{
\tint arr[] = {10, 20};
\tint *p = arr;
\t*++p;
\tprintf("arr[0] = %d, arr[1] = %d, *p = %d",
\t\t\t\t\t\tarr[0], arr[1], *p);
\treturn 0;
}
/<stdio.h>

結果: ?

規則:

(一) 前置 ++ 和 * 的優先級一樣,所以採用從右往左的方式進行計算;

(二)後置 ++ 的優先級高於 * 和前置 ++ 使用從左往右的計算方式進行計算;

 ++*p 的意思就是 ++(*p)
*p++ 的意思就是 *(p++)
*++p 的意思就是 *(++p)

所以第一個程序的輸出為:

arr[0] = 11, arr[1] = 20, *p = 11

第二個程序輸出的結果為:

arr[0] = 10, arr[1] = 20, *p = 20

第三個程序的輸出結果為:

arr[0] = 10, arr[1] = 20, *p = 20


分享到:


相關文章: