printf解析方式

2021-08-09 06:29:50 字數 712 閱讀 8349

先看一段**:

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...