C語言指針的小問題
#include <stdio.h>void main(){ int a[5] = {1,2,3,4,5} , *p; p = &a[0]; printf("%d" , *(p++));}這個C語言問題裡,結果怎麼是1啊?不是說*(p++)的意思是先取*p=a[0],然後p+1,指向a[1],那麼答案應該是2呀。求解釋
最佳回答:
編譯器的緣故,有兩種編譯順序,左優先和右優先,這個的執行過程是:先輸出p指向的a【0】,然後再
p++,指向a【1】,先取*p=a[0],完了輸出顯示,然後p+1,指向a[1],你看到的是a[0]的輸出
-
追問:
-
我把這個程序稍微改一下,變成
int a[5] = {1,2,3,4,5} , *p;
p = &a[0];
printf("%d,%d",*(p++),*(++p));
結果就是2,2了,怎麼回事啊?這個兩個指針前後會相互影響?
-
回答:
-
啊,我知道了,編譯順序是右優先,先編譯的,*(++p),然後是,*(p++),從printf的最右邊開始
,多幾個就看出來了