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

首頁 > 學院 > 開發(fā)設計 > 正文

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

2019-11-11 01:14:58
字體:
來源:轉載
供稿:網友
/*可變參數列表可變參數列表是通過宏來實現的,這些宏定義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字符,然后把這個字符打印出來*/

}


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 柳林县| 陇南市| 嘉定区| 柳林县| 体育| 辽宁省| 郎溪县| 仁化县| 定南县| 特克斯县| 九江市| 贡嘎县| 泰来县| 会宁县| 三明市| 襄樊市| 安岳县| 竹溪县| 屏南县| 杨浦区| 石泉县| 南投市| 高尔夫| 华容县| 衢州市| 确山县| 融水| 辉县市| 三亚市| 涡阳县| 安岳县| 甘洛县| 临夏县| 开阳县| 金寨县| 嵊泗县| 鄢陵县| 西峡县| 黄石市| 定陶县| 宣武区|