先看一段**:
void main(void)
; int
*ptr=arr;
*(ptr++)+=123;
printf("%d,%d",*ptr,*(++ptr));
}
程式執行最終輸出的結果是8,8
其實剛開始我也很納悶,*ptr不是arr[1] = 7嗎?怎麼回事呢
我認為乙個很關鍵的問題是:可能有很多人把*(ptr++)+=123;
展開的時候變成了*(ptr++)= *(ptr++) + 123;
,這樣的話得到的結果就是9,9,這是個明顯的錯誤。因為*(ptr++)+=123;
是*(ptr)+=123;
和ptr++;
兩句話的組合。若要展開,即為*(ptr)= *(ptr)+123;
和ptr++;
,而不是想當然將ptr++;
這句話執行兩次。
還有乙個點,非常重要,當我們即使按照上面提到的方式來展開的時候,發現任然有問題,難道不是應該得到7,8這樣的結果嗎?
這是我們可能就會想為什麼會這樣,於是我做了乙個小測試:
printf("%d,%d",*(++ptr),*(ptr));
將上面兩個結果放過來列印,意外的是結果竟然是8,7 printf 函式壓棧方式
c語言,c 函式呼叫壓棧方式取決與編譯器。但是一般編譯器是右序壓棧的。下面介紹一下c 語言是如何右序壓棧的 如下函式 include int main 一般人會認為輸出結果是 3,4 5 可是實際結果卻是 4,3 5 為什麼呢,原因就取決於c 語言的函式壓棧方式是右序的。在比如有 int x 2 y...
C XML解析方式例項解析
c xml解析通過xpath的方式是如何辦到的呢?具體的操作步驟是什麼呢?那麼下面我們就向你介紹通過xpath的方式來實現c xml解析,希望對你了解c xml解析有所幫助。c xml解析通過xpath的方式的步驟 1 需要先載入文件,然後再讀取想要的節點值。xml文件 protected xmld...
C XML解析方式例項解析
c xml解析通過xpath的方式是如何辦到的呢?具體的操作步驟是什麼呢?那麼下面我們就向你介紹通過xpath的方式來實現c xml解析,希望對你了解c xml解析有所幫助。c xml解析通過xpath的方式的步驟 1 需要先載入文件,然後再讀取想要的節點值。xml文件 protected xmld...