国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C語言可變參數列表詳述及實現printf函數

2019-11-10 23:18:18
字體:
來源:轉載
供稿:網友
/*可變參數列表可變參數列表是通過宏來實現的,這些宏定義stdarg.h頭文件,它是標準庫的一部分。這個頭文件聲明了一個類型va_list和三個宏——va_start、va_arg、va_end。我們可以聲明一個類型為va_list的變量,與這幾個宏配合使用,訪問參數的值。注意:1.這些宏無法判斷實際存在的參數的數量。          2.這些宏無法判斷每個參數的類型。*///測試用例:#include<stdio.h>#include<windows.h>#include<stdarg.h>#include<assert.h>void my_PRintf(char*format, ...);void myPutInt(int a);int main(){int i = 123;char j = 'w';char*str = "happy everyday!";my_printf("a=%d/nb=%c/n*str=%s/n", i, j, str);system("pause");return 0;}//定義my_prinf,實現打印3種類型 int char 字符串void my_printf(char*format, ...){assert(format);va_list va_cur;//定義一個va_list類型變量va_curva_start(va_cur, format);// 初始化va_arg這個變量。它的第一個參數是va_ list變量的名字,                       //第二個參數是省略號前最后一個有名字的參數。const char *start = format;while (*start){if (*start == '%'){*start++;switch (*start){case 'd':{    int _int = va_arg(va_cur, int);/*為了訪問可變參數,需要使用va_arg,                               這個宏接受兩個參數:va_list變量和參數列表中下一個參數的類型*/myPutInt(_int);start++;break;}case 'c':{char _char = va_arg(va_cur, char);putchar(_char);start++;break;}case 's':{char*_str= va_arg(va_cur, char*);   while (*_str){putchar(*_str++);}start++;}}}else{putchar(*start);*start++;}}va_end(va_cur);//當訪問完最后一個可變參數之后,需要調用va_end}//遞歸將一個整型值轉換為字符并打印void myPutInt(int a){int value;value= a / 10;if (value){myPutInt(value);}putchar(a % 10 + '0');/*每次調用putchar函數得到變量value的最后一個數字,并對value進行模10 取余運算,其結果是一個0到9之間的整數。并把它與字符常量‘0’相加,其 結果是對應這個數字的ASCII字符,然后把這個字符打印出來*/

}


上一篇:Spring4.3.x 容器的刷新過程

下一篇:NYOJ-19

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 北海市| 满洲里市| 博湖县| 都兰县| 阿合奇县| 丰顺县| 博白县| 邵东县| 香河县| 周口市| 巴中市| 喜德县| 惠来县| 鹤峰县| 奉节县| 松滋市| 阿拉善左旗| 新疆| 旬阳县| 唐河县| 柏乡县| 镇巴县| 响水县| 若尔盖县| 西藏| 九江县| 威海市| 乐业县| 巨野县| 顺昌县| 南丹县| 松江区| 涞水县| 渑池县| 寻甸| 天镇县| 新丰县| 林西县| 屏南县| 神池县| 体育|