可變引數的函式,myprintf,itoa

2021-08-14 10:20:25 字數 1391 閱讀 6962

1、可變引數

標頭檔案 stdarg;型別 va_list;

巨集 va_start 到達可變引數的起始位置。初始化va_list型別的變數,使其指向可變引數列表的頭(即第1個可變引數)。例:va_start(ap, str);

巨集 va_arg 獲取可變引數,當遇到乙個結束標誌時停止處理。返回乙個可變長度引數的值,並使va_list型別變數指向下乙個可變引數。需使用乙個型別名來確定要返回的型別和va_list指標需要移動的位元組單位。例:int a = va_arg(ap, int); char ch = va_arg(ap, int); char *p = va_arg(ap, char *)

2、itoa整型變數轉為字串型

首先提取整數的各個位,並將其轉換為字元。最後需要將該字串前面的若干個0去掉。

源**:

1 /*

2 * file: p76_myprintf.c

3 * date: 20180108

4 * ---------------

5 * description: myprintf()

6 * 可變引數函式

7 * 數字轉字串,並將字串前的若干個0去掉

8 */

9 10 #include 11 #include 12 #include 13 #include 14

15 int myprintf(const char *format, ...);

16 char *itoa(int val, char *p);

17 18 int main(int argc, char *args)

19 24

25 /* 自定義的printf函式,這是乙個可變引數的函式 */

26 int myprintf(const char *format, ...)

27 46 else if(c == '%')

47

73 }

74 format++; // 處理下乙個字元

75 c = *format;

76 }

77 va_end(ap); // 清理

78 return count;

79 }

80 81 /* short型變數轉為字串 */

82 char *itoa(int val, char *p)

83

編譯執行:

可變參函式(my printf可變參函式的實現)

可變參函式 其引數列表的引數型別與個數可變,採用ansi標準形式時,引數個數可變的函式的原型宣告是 type funcname type para1,type para2,至少需要乙個普通的形式引數,後面的省略號不表示省略,而是函式原型的一部分,為引數佔位符,type是函式返回值和形式引數的型別 可...

可變引數的函式

1 可變引數的概念 c語言中支援引數可變的函式,printf就是乙個典型的引數可變函式,其函式原型如下 include int printf const char format,printf函式的原型中第1個引數format是固定的,後面的引數個數和型別都是可變的。編譯器使用三個點 作為引數的佔位符...

可變引數函式

c函式要在程式中用到以下這些巨集 void va start va list arg ptr,prev param type va arg va list arg ptr,type void va end va list arg ptr va list 用來儲存巨集va start va arg和v...