剖析printf函式

2021-07-22 17:01:38 字數 1004 閱讀 1975

printf是什麼,對於起初學習c語言的同學來說肯定都特別的疑惑。在這裡,解答一下:它是乙個函式。既然是乙個函式的話,想必肯定有返回值和引數吧。那麼它的返回值和引數是什麼呢?

1、看一下這個例子,可能更好理解點:

這個看起來只是個printf函式,但它卻在printf函式基礎上巢狀了好幾層printf,這樣下來結果是什麼呢?

我們就知道,printf(buf, fmt, arg)函式可以傳多個引數,就像這裡巢狀的printf函式一樣,而它的返回值為什麼是4321呢。

43即是i的值,2是列印出的43這個值的字元的個數,1是上一層列印出的字元的個數。

這裡還需要說明一點的是:函式的引數壓棧是從右往左壓的。即呼叫printf函式時也是最右邊的引數先壓棧。

2、格式化輸出

printf()函式是乙個格式化輸出函式,可以列印出變數的指令。

比如我們經常遇到的%d,%c,%s等,可以通過符號轉換輸出相應的結果。

3、printf()函式的引數列表

形式:printf(const char *fmt, ...)

int __cdecl printf(_in_z_ _printf_format_string_ const char * _format, ...);

當乙個可變引數列表特別多或者不確定時,我們就可以用...替代它。

要處理變參函式,需要用到 va_list 型別,和 va_start(初始化引數指標),va_end,va_arg(獲得指向引數的值)巨集定義。

這些引數都是定義在stdarg.h這個標頭檔案中.

用va_arg()從左到右逐個取引數值。

深入剖析printf

printf主要是給控制台列印字串或者數字等。1 printf的引數列表printf const char format,2 printf首先呼叫va start.然後呼叫 output l,最後呼叫 ftbuf 3 output l會解析字串並呼叫va arg,獲取省略號的值,呼叫write st...

printf函式詳解

printf 格式轉換的一般形式如下 flags width prec type 以括號括起來的引數為選擇性引數,而 與type則是必要的。底下先介紹type的幾種形式 d 整數的引數會被轉成一有符號的十進位制數字 u 整數的引數會被轉成一無符號的十進位制數字 o 整數的引數會被轉成一無符號的八進位...

printf函式實現

要實現printf函式需要考慮如下三點 1.如何告訴printf傳入引數的個數 引數個數不確定。2.printf如何訪問到這些引數。3.函式呼叫完成後,系統如何釋放在堆疊的引數。printf函式的定義 原型 int cdecl printf const char format,注 cdecl是c c...