程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言問答 >> C語言指針的小問題

C語言指針的小問題

編輯:C語言問答

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的最右邊開始
,多幾個就看出來了
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved