我們經常會在程式設計中用到printf這個函式,對於這個函式與scanf函式有相似的地方(或者說是有聯絡)
首先我們要先從scanf函式的引數入棧說起,一般ide來說(對c語言)入棧的順序是從右往左進行壓棧
事例一:
壓棧相關的簡單例子,**如下
# include main()
那麼這個輸入會是多少呢?我用dev-c 6.0來試
結果是:m = 0(這個在意料之中),n = 0.00000(意料之外);
之後我查了很久都沒找到詳細的結果,最後在群裡跟別人討論,一下想到了
1)m,n一般為8位元組(視系統而定),入棧後int型一般佔4個位元組,
2)那麼m 是否就留了4個位元組在棧,所以n出棧的時候會先提取x留下的4個位元組再加上自己的4個位元組 出棧
3)那麼這樣就造成的錯誤n = 0.00000
這個例二是我在一次偶然把定義的double的數用%d輸出造成的困惑,可見仔細、小心是多麼的重要了~~當然,不走彎路,哪兒看得見讓你成長的絆腳石呢!哈哈哈隔...
printf函式的引數壓棧問題
最近看到一些程式設計師的筆試題目,經常會考到printf函式的引數壓棧問題,總體來講就是引數從右向左依次壓棧,再出棧,但是今天看到乙個看似很簡單的題目,卻一直找不到頭緒。題目如下 cpp view plain copy include void main 輸出看似很簡單,但是結果卻打出所料。輸出是 ...
printf 函式壓棧方式
c語言,c 函式呼叫壓棧方式取決與編譯器。但是一般編譯器是右序壓棧的。下面介紹一下c 語言是如何右序壓棧的 如下函式 include int main 一般人會認為輸出結果是 3,4 5 可是實際結果卻是 4,3 5 為什麼呢,原因就取決於c 語言的函式壓棧方式是右序的。在比如有 int x 2 y...
C語言printf及引數壓棧順序
1.呼叫格式為 printf 格式化字串 參量表 其中格式化字串包括兩部分內容 一部分是正常字元,這些字元將按原樣輸出 另一部分是格式化規定字元,以 開始,後跟乙個或幾個規定字元,用來確定輸出內容格式。參量表是需要輸出的一系列引數,其個數必須與格式化字串所說明的輸出引數個數一樣多,各引數之間用 分開...